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
September 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.09.10 13:31 "Manually convert 16-bit grayscale image data to 8-bit grayscale in Borland c++", by Robert Zermeno
2009.09.10 13:51 "Re: Manually convert 16-bit grayscale image data to 8-bit grayscale in Borland c++", by Evgenia Gurova
2009.09.10 15:52 "Re: Manually convert 16-bit grayscale image data to 8-bit grayscale in Borland c++", by Bob Friesenhahn
2009.09.11 00:21 "Re: Manually convert 16-bit grayscale image data to 8-bit grayscale in Borland c++", by Robert Zermeno

2009.09.10 13:31 "Manually convert 16-bit grayscale image data to 8-bit grayscale in Borland c++", by Robert Zermeno

Hi everyone,
 
I have been using this website and mail archieve exclusively finding answers
to the questions I had recently.  Thanks a bunch for your knowledge. 
However, I am stuck with this issue i cannot find and answer to because
everyone is using the libtiff library to perform the action.  
 
I am creating an application to manually read in the bits from the file into
memory to be displayed in Borland (I have to read certain segment of a file
given an offset and extract an (x,y) size sub-image of an image.  What I
mean by manually, is I parse through the header and footer myself using
fseek() and fread(), and use the stripOffset and StripByteCount to perform a
fread() for each strip of image data.
 
How on earth may I be able to convert my 16-bit grayscale image data to
8-bit?  I have been able to take 2 bytes to a short value, then truncate it
to a single byte like so:
 
 unsigned short value16 = *TmpBits++;
                       value16 = value16 + (*TmpBits++ << 8)
pBits[curPix++] = (value16/257. + .5)  //convert value to double and round
up.
 
where pBits is my BYTE array to hold image data and TmpBits is another BYTE
array of size StripByteCount.
 
When I dislpay my data in Borland through a TImage object, I will recieve my
image (meaning, you can make out my object I am looking at, but the gray
values for each pixel is way off.  Sometimes too much white and some pixels
are correct for black)  but the gray coloration is way off.  I have to do
this because in Borland, to create my HBITMAP from a bmp object it must be
in 1,4,8 or 24 bpp image.  I then pass this created HBITMAP to an TBitmap
object and associate this Bitmap to an TImage for display purposes.
 
It works well with 8-bit images, but I cannot get the 16-bit data to work. 
Here is my tag information to help out what my issue is:
 

NewSubfileType                   254        LONG          1         0
ImageWidth                        256        LONG          1         14592
ImageLength                       257        LONG          1         6940
BitsPerSample                    258        SHORT         1         16
Compression                      259        SHORT         1         1
PhotometricInterpretation     262        SHORT         1         1
ImageDescription                270        ASCII         13        Space
Imaging
StripOffsets                        273        LONG          6940      56040
85224 114408 143592...
SamplesPerPixel                277        SHORT         1         1
RowsPerStrip                      278        SHORT         1         1
StripByteCounts                 279        LONG          6940      29184
29184 29184 29184...
MinSampleValue                280        SHORT         1         0
MaxSampleValue               281        SHORT         1         2047
XResolution                        282        RATIONAL      1         1/1
YRresolution                      283        RATIONAL      1         1/1
ResolutionUnit                    296        SHORT         1         1
DateTime                           306        ASCII         20       
2001:01:11 18:50:28
Copyright                          33432      ASCII         24        (c)
Space Imaging LLC | 
 
It is a geotiff image, but that is irrelevent.  Please help me understand
this issue. 
Thanks in advance.
Robert