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:
wlux 2011-01-04 14:10:12 +00:00
parent e86fae67c3
commit f39edecba8
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> 2011-01-03 Wolfgang Lux <wolfgang.lux@gmail.com>
* Source/GNUmakefile: * Source/GNUmakefile:

View file

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