AWARE [SYSTEMS] Imaging expertise for the Delphi developer
AWare Systems, Imaging expertise for the Delphi developer, Home TIFF and LibTiff Mailing List Archive

LibTiff Mailing List

TIFF and LibTiff Mailing List Archive
October 2005

Previous Thread
Next Thread

Previous by Thread
Next by Thread

Previous by Date
Next by Date

Contact

The TIFF Mailing List Homepage
This list is run by Frank Warmerdam
Archive maintained by AWare Systems



Valid HTML 4.01!



Thread

2005.10.22 13:47 "checking test images", by <ryuki_dono@yahoo.de>
2005.10.25 11:25 "Re: checking test images", by <ryuki_dono@yahoo.de>
2005.10.25 13:38 "Re: checking test images", by Frank Warmerdam
2005.10.25 14:37 "Re: checking test images", by Bob Friesenhahn
2005.10.26 12:06 "Re: checking test images", by <ryuki_dono@yahoo.de>
2005.10.26 14:43 "Re: checking test images", by Frank Warmerdam
2005.10.26 17:47 "Re: checking test images", by <ryuki_dono@yahoo.de>
2005.10.26 18:05 "Re: checking test images", by Bob Friesenhahn
2005.10.26 18:59 "Re: checking test images", by Joris Van Damme
2005.10.26 19:47 "Re: checking test images", by Bob Friesenhahn
2005.10.26 21:38 "Re: checking test images", by <ryuki_dono@yahoo.de>
2005.10.26 22:06 "Re: checking test images", by Frank Warmerdam

2005.10.22 13:47 "checking test images", by <ryuki_dono@yahoo.de>

I tried to work myself into tiff the whole week and managed to solfe 
most of the problems myself. Unfortunately the test images provided 
with the page doesn't work well. I try to give many informations so 
maybe someone can help me.

I wrote a TIFF structure checking function. It reads every IFD and tries 
to check the DE content as good as possible. Since there is no EOI marker 
like with JPG or PNG I tried to find the true imagesize. At the
start I wondered because most of the images where (theoretic) to small. 
After debuging the matter I saw that some DE have a bytesize of >4 byte 
but a offset of 0. Clear case, the writer doesn't gave an offset for
the data. I assumed that the data was put at the end of the image. Now 
the filesize was right for allmost all files. 3 of them where to short 
after all: cramps.tif, quad-tile.tif, text.tif
I logged the informations:

cramps.tif
filelength = 194176     // real filesize in byte
0 m- 255 (t 3; l 1; bl 2; o 1) // # of DE m Tag
1 m- 256 (t 3; l 1; bl 2; o 800) // (t)ype; (l)ength or count; 
(b)yte(l)ength; (o)ffset
2 m- 257 (t 3; l 1; bl 2; o 607)
3 m- 258 (t 3; l 1; bl 2; o 8)
4 m- 259 (t 3; l 1; bl 2; o 32773)
5 m- 262 (t 3; l 1; bl 2; o 0)
6 m- 266 (t 3; l 1; bl 2; o 1)
7 m- 273 (t 4; l 51; bl 204; o 193628)
8 m- 274 (t 3; l 1; bl 2; o 1)
9 m- 277 (t 3; l 1; bl 2; o 1)
10 m- 278 (t 4; l 1; bl 4; o 12)
11 m- 279 (t 4; l 51; bl 204; o 193832)
12 m- 282 (t 5; l 1; bl 8; o 194036)
13 m- 283 (t 5; l 1; bl 8; o 194044)
datalength = 194052 (-124) // length of all DEs, Headers and IFDs 
accumulated

quad-tile.tif:
filelength = 209220
0 m- 256 (t 3; l 1; bl 2; o 512)
1 m- 257 (t 3; l 1; bl 2; o 384)
2 m- 258 (t 3; l 3; bl 6; o 3)
3 m- 259 (t 3; l 1; bl 2; o 5)
4 m- 262 (t 3; l 1; bl 2; o 2)
5 m- 273 (t 4; l 12; bl 48; o 209106)
6 m- 274 (t 3; l 1; bl 2; o 1)
7 m- 277 (t 3; l 1; bl 2; o 3)
8 m- 278 (t 4; l 1; bl 4; o 128)
9 m- 279 (t 4; l 12; bl 48; o 209154)
10 m- 280 (t 3; l 3; bl 6; o 3)
11 m- 281 (t 3; l 3; bl 6; o 3)
12 m- 284 (t 3; l 1; bl 2; o 1)
13 m- 322 (t 3; l 1; bl 2; o 128)
14 m- 323 (t 3; l 1; bl 2; o 128)
15 m- 32996 (t 3; l 3; bl 6; o 3)
16 m- 32997 (t 3; l 1; bl 2; o 1)
17 m- 32998 (t 3; l 1; bl 2; o 1)
datalength = 209202 (-18)

text.tif:
filelength = 154496
0 m- 255 (t 3; l 1; bl 2; o 1)
1 m- 256 (t 3; l 1; bl 2; o 1512)
2 m- 257 (t 3; l 1; bl 2; o 359)
3 m- 258 (t 3; l 1; bl 2; o 4)
4 m- 259 (t 3; l 1; bl 2; o 32809)
5 m- 262 (t 3; l 1; bl 2; o 0)
6 m- 266 (t 3; l 1; bl 2; o 1)
7 m- 273 (t 4; l 6; bl 24; o 210)
8 m- 274 (t 3; l 1; bl 2; o 1)
9 m- 277 (t 3; l 1; bl 2; o 1)
10 m- 278 (t 4; l 1; bl 4; o 64)
11 m- 279 (t 4; l 6; bl 24; o 234)
12 m- 282 (t 5; l 1; bl 8; o 194)
13 m- 283 (t 5; l 1; bl 8; o 202)
14 m- 284 (t 3; l 1; bl 2; o 1)
0 m- 255 (t 3; l 1; bl 2; o 1)
1 m- 256 (t 3; l 1; bl 2; o 1512)
2 m- 257 (t 3; l 1; bl 2; o 359)
3 m- 258 (t 3; l 1; bl 2; o 1)
4 m- 259 (t 3; l 1; bl 2; o 1)
5 m- 262 (t 3; l 1; bl 2; o 0)
6 m- 266 (t 3; l 1; bl 2; o 1)
7 m- 273 (t 4; l 6; bl 24; o 86550)
8 m- 274 (t 3; l 1; bl 2; o 1)
9 m- 277 (t 3; l 1; bl 2; o 1)
10 m- 278 (t 4; l 1; bl 4; o 64)
11 m- 279 (t 4; l 6; bl 24; o 86574)
12 m- 282 (t 5; l 1; bl 8; o 86534)
13 m- 283 (t 5; l 1; bl 8; o 86542)
14 m- 284 (t 3; l 1; bl 2; o 1)
datalength = 154449 (-47)

There are no unusual tags and there should not be such a problem after 
all. Someone knows more?

I wrote a simple function for copying a TIFF file into my DIB too. It 
works only for a part of the test images :-(

bool CDIB::Load_TIF(CString &pf)   // Load JPG from file (ORIGINAL)
{
    TIFF* tif = TIFFOpen((LPCTSTR)pf, "r");
    if (tif)
    {
    uint32 w, h;        // width and height
    size_t npixels;
    uint32* raster;
    uint16 orientation=ORIENTATION_TOPLEFT;

    TIFFSetErrorHandler(NULL);    // ignore errors
    TIFFSetWarningHandler(NULL);

    TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w);
    TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h);
    TIFFGetField(tif, TIFFTAG_ORIENTATION, &orientation);

    npixels = w * h;
    raster = (uint32*) _TIFFmalloc(npixels * sizeof (uint32));

    if (raster != NULL)
    {
        if (TIFFReadRGBAImage(tif, w, h, raster, 0)) // read image
        {
            if (!Create(w, h, 24))    // dib memory allocation
            {
                _TIFFfree(raster);
                TIFFClose(tif);
                return false;    // error
            }
            BYTE *bits;
            BYTE *source=(BYTE*)raster;
            for (long y=0; y < h; y++)
            {
                if ((orientation==ORIENTATION_TOPLEFT) || (orientation==ORIENTATION_TOPRIGHT)) // Bild steht auf Kopf
                    bits=(BYTE*)GetPixelAddress(0,h-y-1);    // geting memory address
                else
                    bits=(BYTE*)GetPixelAddress(0,y);  
                for (long x=0; x < w; x++)
                {
                    *bits++ = (BYTE)source[0];    //B  ABGR -> BGR
                    *bits++ = (BYTE)source[1];    //G
                    *bits++ = (BYTE)source[2];    //R
                    source+=4;    // 4 Byte forward
                }
            }
        }
        _TIFFfree(raster);
    }
    TIFFClose(tif);
    }
    else
        return false;
  m_dwLength = m_pBMI->bmiHeader.biSizeImage;
  return TRUE; 
} 

As you can see its a pretty simple function. Thats my style! It doesn't 
work for following  files:
caspian.tif, quad-jpeg.tif,  smallliz.tif,  zackthecat.tif,  
flowers-miniblack-(06, 10,  12, 14, 24, 32).tif,
flower-palette-16.tif, flower-rgb-contig-(02,04,10,12,14,24,32), 
flower-rgb-planar-(02,04,10,12,14,24,32),
flower-separated-contig-16.tif, flower-separated-contig-(08,16).tif

I get a warning with TIFFOpen and an fatal error with TIFFReadRGBAImage 
for all that files. Can't libtiff read that files?
Maybe it is a problem of my library build. Allthough I used the newest 
version (3.7.4) I had alot of problems with compiling the library. I have 
a new JPEG library here but makefile couldn't compile it for tifflib.
I use Win98SE with VC++ 6.0. I managed to compile the tifflibrary after 
all but without JPEG Support and not very clean. Isn't there a place 
where I can download a full compiled Windows libtiff with header files?

I hope someone can explain the problems or give a solution. Thank you!