[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46225] trunk/blender/source/blender/imbuf /intern/tiff.c: Fix #31257: tiff reader not reading 16 bit grayscale images correctly.

Brecht Van Lommel brechtvanlommel at pandora.be
Thu May 3 11:51:12 CEST 2012


Revision: 46225
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46225
Author:   blendix
Date:     2012-05-03 09:51:12 +0000 (Thu, 03 May 2012)
Log Message:
-----------
Fix #31257: tiff reader not reading 16 bit grayscale images correctly.

Modified Paths:
--------------
    trunk/blender/source/blender/imbuf/intern/tiff.c

Modified: trunk/blender/source/blender/imbuf/intern/tiff.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/tiff.c	2012-05-03 09:31:59 UTC (rev 46224)
+++ trunk/blender/source/blender/imbuf/intern/tiff.c	2012-05-03 09:51:12 UTC (rev 46225)
@@ -317,8 +317,8 @@
 	int i;
 	for (i=0; i < scanline_w; i++) {
 		rectf[i*4 + 0] = sbuf[i*spp + 0] / 65535.0;
-		rectf[i*4 + 1] = sbuf[i*spp + 1] / 65535.0;
-		rectf[i*4 + 2] = sbuf[i*spp + 2] / 65535.0;
+		rectf[i*4 + 1] = (spp>=3)? sbuf[i*spp + 1] / 65535.0: sbuf[i*spp + 0] / 65535.0;
+		rectf[i*4 + 2] = (spp>=3)? sbuf[i*spp + 2] / 65535.0: sbuf[i*spp + 0] / 65535.0;
 		rectf[i*4 + 3] = (spp==4)?(sbuf[i*spp + 3] / 65535.0):1.0;
 	}
 }
@@ -328,8 +328,8 @@
 	int i;
 	for (i=0; i < scanline_w; i++) {
 		rectf[i*4 + 0] = fbuf[i*spp + 0];
-		rectf[i*4 + 1] = fbuf[i*spp + 1];
-		rectf[i*4 + 2] = fbuf[i*spp + 2];
+		rectf[i*4 + 1] = (spp>=3)? fbuf[i*spp + 1]: fbuf[i*spp + 0];
+		rectf[i*4 + 2] = (spp>=3)? fbuf[i*spp + 2]: fbuf[i*spp + 0];
 		rectf[i*4 + 3] = (spp==4)?fbuf[i*spp + 3]:1.0f;
 	}
 }
@@ -437,6 +437,8 @@
 				if (bitspersample == 32) {
 					if (chan == 3 && spp == 3) /* fill alpha if only RGB TIFF */
 						fill_vn_fl(fbuf, ibuf->x, 1.0f);
+					else if (chan >= spp) /* for grayscale, duplicate first channel into G and B */
+						success |= TIFFReadScanline(image, fbuf, row, 0);
 					else
 						success |= TIFFReadScanline(image, fbuf, row, chan);
 					scanline_separate_32bit(tmpibuf->rect_float+ib_offset, fbuf, ibuf->x, chan);
@@ -445,6 +447,8 @@
 				else if (bitspersample == 16) {
 					if (chan == 3 && spp == 3) /* fill alpha if only RGB TIFF */
 						fill_vn_ushort(sbuf, ibuf->x, 65535);
+					else if (chan >= spp) /* for grayscale, duplicate first channel into G and B */
+						success |= TIFFReadScanline(image, fbuf, row, 0);
 					else
 						success |= TIFFReadScanline(image, sbuf, row, chan);
 					scanline_separate_16bit(tmpibuf->rect_float+ib_offset, sbuf, ibuf->x, chan);




More information about the Bf-blender-cvs mailing list