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
July 2009

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

2009.07.16 14:33 "reading an 8 bit image", by Joe Tracy
2009.07.17 17:28 "Re: reading an 8 bit image", by Michael Persons
2009.07.20 15:55 "Re: reading an 8 bit image", by Michael Persons
2009.07.20 17:38 "Re: reading an 8 bit image", by Joe Tracy

2009.07.17 17:28 "Re: reading an 8 bit image", by Michael Persons

I just glanced at it and at first glance it appears that you would need to
increment the "ptr" variable by 4 and not by 3 since the image is a RGBA
image.

________________________________
From: tiff-bounces@lists.maptools.org
[mailto:tiff-bounces@lists.maptools.org] On Behalf Of Joe Tracy
Sent: Thursday, July 16, 2009 7:33 AM
To: tiff@lists.maptools.org
Subject: [Tiff] reading an 8 bit image

Hi,

I have been reading 16 bit grayscale tiff images for a while now using the
ReadScanLine method: this works fine.

However, I am unable to figure out how to read in an 8 bit image.  I have
tried many variations, but the closest I come is this:

(I am just putting the pixel data into an array, then subsequently create an
image later.  Using this method, my image is not correct.)

I am using C#.Net, using DLLImports for the libtiff calls.

                        TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, ref w);
                        TIFFGetField(tif, TIFFTAG_IMAGELENGTH, ref h);
                        TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, ref bits);
                        TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, ref
                    samples);

pixel_array = new int[h, w, 3];
                            UInt32 size = h * w;
                            byte* raster = _TIFFmalloc((UInt32)(size *
                    sizeof(UInt32)));
                            int val = TIFFReadRGBAImage(tif, w, h,
                    (byte*)raster, 0);
                            if (val != 0)
                            {
                                for (int j = 0; j < h; j++)
                                {
                                    for (int i = 0, ptr = 0; i < w; i++, ptr
                    += 3)
                                    {
                                        pixel_array[j, i, 0] =
                    (int)raster[ptr + j * w];
                                        pixel_array[j, i, 1] =
                    (int)raster[ptr + 1 + j * w];
                                        pixel_array[j, i, 2] =
                    (int)raster[ptr + 2 + j * w];
                                    }
                                }
                            }
                            _TIFFfree((byte*)raster);

My image comes in "garbled".  It is close, but not there.

Any help is appreciated.

Thanks,
Joe