2016-05-10 5 views
0

Ich möchte .tif in delphi angezeigt werden und ich bin schon mit libTIFFWie wird ein TIFF angezeigt? mit pascal

var 
    OpenTiff: PTIFF; 
    FirstPageWidth,FirstPageHeight: Cardinal; 
    FirstPageBitmap: TBitmap; 
begin 
    OpenTiff:=TIFFOpen('C:\World.tif','r'); 
    TIFFGetField(OpenTiff,TIFFTAG_IMAGEWIDTH,@FirstPageWidth); 
    TIFFGetField(OpenTiff,TIFFTAG_IMAGELENGTH,@FirstPageHeight); 
    FirstPageBitmap:=TBitmap.Create; 
    FirstPageBitmap.PixelFormat:=pf32bit; 
    FirstPageBitmap.Width:=FirstPageWidth; 
    FirstPageBitmap.Height:=FirstPageHeight; 
    TIFFReadRGBAImage(OpenTiff,FirstPageWidth,FirstPageHeight, 
       FirstPageBitmap.Scanline[FirstPageHeight-1],0); 
    TIFFClose(OpenTiff); 
    TIFFReadRGBAImageSwapRB(FirstPageWidth,FirstPageheight, 
       FirstPageBitmap.Scanline[FirstPageHeight-1]); 

end; 

Aber warum die Anzeige das Bild nicht? Jeder hat eine Lösung? Und Entschuldigung für mein schlechtes Englisch.

+2

ich keinen Code hier sehen, die versucht, alles anzeigen. –

+2

Eine Bitmap ist nur ein Speicher. Es wird nicht angezeigt, es sei denn, Sie malen es irgendwo oder weisen es einem Bild zu. – Johan

Antwort

1

Konvertieren Sie den TIFF in eine Bitmap mit dem folgenden Code.
Dann zeigen Sie die Bitmap wie gewohnt an.
Hier ist die vollständige Funktion, die Sie verwenden (mit ein paar Änderungen).

function ReadTiffIntoBitmap(const Filename: string): TBitmap; 
var 
    OpenTiff: PTIFF; 
    FirstPageWidth, FirstPageHeight: Cardinal; 
begin 
    Result:= nil; //in case you want to tweak code to not raise exceptions. 
    OpenTiff:= TIFFOpen(Filename,'r'); 
    if OpenTiff = nil then raise Exception.Create(
      'Unable to open file '''+Filename+''''); 
    try 
    TIFFGetField(OpenTiff, TIFFTAG_IMAGEWIDTH, @FirstPageWidth); 
    TIFFGetField(OpenTiff, TIFFTAG_IMAGELENGTH, @FirstPageHeight); 
    Result:= TBitmap.Create; 
    try 
     Result.PixelFormat:= pf32bit; 
     Result.Width:= FirstPageWidth; 
     Result.Height:= FirstPageHeight; 
    except 
     FreeAndNil(Result); 
     raise Exception.Create('Unable to create TBitmap buffer'); 
    end; 
    TIFFReadRGBAImage(OpenTiff, FirstPageWidth, FirstPageHeight, 
       Result.Scanline[FirstPageHeight-1],0); 
    TIFFReadRGBAImageSwapRB(FirstPageWidth, FirstPageheight, 
       Result.Scanline[FirstPageHeight-1]); 
    finally 
    TIFFClose(OpenTiff); 
    end; 
end; 

Jetzt ist es im folgenden Kontext verwenden:
einen Knopf an setzen und ein Bild auf dem Formular.
Klicken Sie doppelt auf die Schaltfläche und füllen Sie die OnClick-Handler für die Schaltfläche wie folgt:

Form1.Button1Click(sender: TObject); 
var 
    MyBitmap: TBitmap; 
begin 
    MyBitmap:= ReadTiffIntoBitmap('c:\test.tiff'); 
    try 
    //uncomment if..then if ReadTiffIntoBitmap does not raise exceptions 
    //but returns nil on error instead. 
    {if Assigned(MyBitmap) then} Image1.Picture.Assign(MyBitmap); 
    finally 
    MyBitmap.Free; 
    end; 
end; 

ich die Vollversion Ihres Schnipsel sich unter: http://www.asmail.be/msg0055571626.html

+0

Die Funktion sollte die 'TIFFClose()' in ein 'try/finally' setzen, und dann sollten Sie die Überprüfung für Nil bei Funktionsexit entfernen, da die Funktion wegen Exception-Raios niemals null zurückgeben kann. –