| AWARE [SYSTEMS] | Imaging expertise for the Delphi developer | |||||||
![]() |
TIFF and LibTiff Mailing List Archive | |||||||
LibTiff Mailing List
TIFF and LibTiff Mailing List Archive Contact
The TIFF Mailing List Homepage |
Thread2005.04.29 16:09 "Re: Delphi 7, TIFF G3/4, Multipage", by Joris Van DammeMatthias, > I can open and see my file with > "image1.Picture.Bitmap:= ReadTiffIntoBitmap(filename);" > and can see the TIFF in my Image-Obj on the Form. ReadTiffIntoBitmap is not part of LibTiffDelphi. It is thus helpful to mention where it came from... http://www.asmail.be/msg0055571626.html ReadTiffIntoBitmap returns a TBitmap. Your calling code now 'owns' the TBitmap. The statement 'Picture.Bitmap:=x' is the same as 'Picture.Assign(x)'. It does not transfer ownership of the TBitmap to the TImage, but makes a 'deep copy' instead (which boils down to incrementation of some usage counters and only a copy of some small upper-level objects, so is still fast). As a result, your calling code still owns the original TBitmap... and it fails to Destroy it. Potentially huge memory leak. Instead, do something like... var m: TBitmap; begin {add error handling too!!!!!!} m:=ReadTiffIntoBitmap(filename); image1.Picture.Assign(m); m.Free; > - how can i make a the opened file fit into my Image-Obj ? TImage has properties like Stretched and stuff... see your Delphi docs. > - show width, hight, resolution, and pages! (multi-/single-page) Ask the value of individual tags in a TIFF IFD with TIFFGetField. For instance, to open a TIFF file, retrieve first page image width, and next close it again, use this: var OpenTiff: PTIFF; FirstPageWidth,FirstPageHeight: Cardinal; begin OpenTiff:=TIFFOpen(Filename,'r'); if OpenTiff=nil then raise Exception.Create( 'Unable to open file '''+Filename+''''); TIFFGetField(OpenTiff,TIFFTAG_IMAGEWIDTH,@FirstPageWidth); TIFFGetField(OpenTiff,TIFFTAG_IMAGELENGTH,@FirstPageHeight); TIFFClose(OpenTiff); {FirstPageWidth and FirstPageHeigth are now what you are after} The thing to remember here, is that a TIFF 'image header' is not a fixed set of fields, like is the case with most image file formats. Instead, it's a set of tags, and it can contain any tags the writer choose to write. For an overview of most known tags, see http://www.awaresystems.be/imaging/tiff/tifftags.html. > - how to cut off lines ? > - how to raotate? These are not things that are the responsability of LibTiff. Remember, LibTiff is a TIFF codec, which means it is able to decode and encode a TIFF file, not actually do image editing. The proper way, is to delegate such stuff to things like TBitmap and such. In Delphi, you would probably do this to open a TIFF, read the first page into a TBitmap, and next make a second TBitmap that does not include upper two lines (but this is from the top of my head, and I don't usually use this stuff, so beware) var m: TBitmap; n: TBitmap; begin m:=ReadTiffIntoBitmap(filename); n:=TBitmap.Create; n.PixelFormat:=m.PixelFormat; n.Width:=m.Width; n.Height:=m.Height-2; n.Canvas.Draw(0,-2,m); m.Destroy; {n is now your image decoded from filename TIFF file, minus upper two lines} {you now own n here, and need to destroy or something in the end} Same principle goes for rotating and stuff, you don't want to depend on LibTiffDelphi for that, you'll need to read the Delphi docs and play around with TBitmap and stuff. > - what would be the way to handle mulit-part-tiffs? See http://www.remotesensing.org/libtiff/man/index.html, and more specifically http://www.remotesensing.org/libtiff/man/TIFFReadDirectory.3tiff.html and related. Joris Van Damme info@awaresystems.be http://www.awaresystems.be/ Download your free TIFF tag viewer for windows here: http://www.awaresystems.be/imaging/tiff/astifftagviewer.html |
|||||||