Fix long standing bug where an incorrect tiff representation was

generated for RGB images if bits per sample != 8.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@31829 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Wolfgang Lux 2011-01-04 14:10:12 +00:00
parent da2407140a
commit 106d7bf39d
2 changed files with 12 additions and 8 deletions

View file

@ -1,3 +1,9 @@
2011-01-04 Wolfgang Lux <wolfgang.lux@gmail.com>
* Source/tiff.m (NSTiffWrite):
Fix long standing bug where incorrect data was written out for RGB
images if bits per sample != 8.
2011-01-03 Wolfgang Lux <wolfgang.lux@gmail.com>
* Source/GNUmakefile:

View file

@ -451,6 +451,7 @@ NSTiffWrite(TIFF *image, NSTiffInfo *info, unsigned char *data)
int i;
unsigned int row;
int error = 0;
int scan_line_size;
TIFFSetField(image, TIFFTAG_IMAGEWIDTH, info->width);
TIFFSetField(image, TIFFTAG_IMAGELENGTH, info->height);
@ -468,6 +469,7 @@ NSTiffWrite(TIFF *image, NSTiffInfo *info, unsigned char *data)
else
sample_info[0] = EXTRASAMPLE_UNASSALPHA;
TIFFSetField(image, TIFFTAG_EXTRASAMPLES, info->extraSamples, sample_info);
scan_line_size = TIFFScanlineSize(image);
switch (info->photoInterp)
{
@ -475,24 +477,20 @@ NSTiffWrite(TIFF *image, NSTiffInfo *info, unsigned char *data)
case PHOTOMETRIC_MINISWHITE:
if (info->planarConfig == PLANARCONFIG_CONTIG)
{
int line = ceil((float)info->width * info->bitsPerSample / 8.0);
for (row = 0; row < info->height; ++row)
{
WRITE_SCANLINE(0)
buf += line;
buf += scan_line_size;
}
}
else
{
int line = ceil((float)info->width / 8.0);
for (i = 0; i < info->samplesPerPixel; i++)
{
for (row = 0; row < info->height; ++row)
{
WRITE_SCANLINE(i)
buf += line;
buf += scan_line_size;
}
}
}
@ -504,7 +502,7 @@ NSTiffWrite(TIFF *image, NSTiffInfo *info, unsigned char *data)
for (row = 0; row < info->height; ++row)
{
WRITE_SCANLINE(0)
buf += info->width * info->samplesPerPixel;
buf += scan_line_size;
}
}
else
@ -514,7 +512,7 @@ NSTiffWrite(TIFF *image, NSTiffInfo *info, unsigned char *data)
for (row = 0; row < info->height; ++row)
{
WRITE_SCANLINE(i)
buf += info->width;
buf += scan_line_size;
}
}
}