1998.02.09 23:06 "Problem with Libtiff", by Tony Mochan

Hi there,

I have been trying to use libtiff to write a small program to view a TIFF file and calculate various things using the colour of pixels.

I have been successful in viewing images that have up to 16384 pixels (4000 Hex), but beyond that value, the image mearly repeats itself, thus chopping off the rest of the pixels.

I'm not sure if it is when loading it in, allocating the memory or displaying it that I'm going wrong.

Any help would be appreciated.

Code extracts follow: (raster, width and height are class variables)

/********************** OnFileOpen Function
*****************************/

// Open the TIFF file            
                TIFF* tif=TIFFOpen(fname,"r");

    if (tif) {                    

// Get the Width and Height of the Image
        TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width);
        TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height);

// Allocate the memory for the raster
        raster = (uint32*) _TIFFmalloc(width * height * sizeof(uint32));

        if (raster != NULL) {
// Read in the Image Raster
                if (TIFFReadRGBAImage(tif, width, height, raster, 1)) {

                        // Redraw the Window                    
                        RedrawWindow(); 
            }
        }
        TIFFClose(tif);
        } // End of if(tif)


/********************** OnDraw Function *****************************/

   if (raster!=NULL)             
    {                                        
                // Centre the Image
                StartPosY = (WinHeight-(int)height)/2;
                if (StartPosY<0)
                        StartPosY=0;
                StartPosX = (WinWidth-(int)width)/2;
                if (StartPosX<0)
                        StartPosX=0;

        // Draw the Image (Pixel by Pixel)
                for (uint32 y=StartPosY;y<(height+StartPosY);y++)
                        for (uint32 x=StartPosX;x<(width+StartPosX);x++)
                {
                                rpixel = TIFFGetR(raster[((y-StartPosY)*width)+(x-StartPosX)]);
                                gpixel = TIFFGetG(raster[((y-StartPosY)*width)+(x-StartPosX)]);
                                bpixel = TIFFGetB(raster[((y-StartPosY)*width)+(x-StartPosX)]);
                        pDC->SetPixel((int)x, (int)(WinHeight-y),
RGB(rpixel,gpixel,bpixel));
                }
        }

Also, is there a maximum limit to the size of a TIFF file that can be read, or does this just depend on the computer???

Thanks.

--
Tony Mochan                             amochan@mcs.dundee.ac.uk
Software Developer
Department of Orthopaedic & Trauma Surgery (University of Dundee)
Dundee Royal Infirmary
Scotland, U.K.