summaryrefslogtreecommitdiff
path: root/graphics/libimg/files/patch-tiff
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/libimg/files/patch-tiff')
-rw-r--r--graphics/libimg/files/patch-tiff592
1 files changed, 592 insertions, 0 deletions
diff --git a/graphics/libimg/files/patch-tiff b/graphics/libimg/files/patch-tiff
new file mode 100644
index 000000000000..5722f0ca1612
--- /dev/null
+++ b/graphics/libimg/files/patch-tiff
@@ -0,0 +1,592 @@
+--- imgTIFF.c Tue Jan 15 15:59:58 2002
++++ imgTIFF.c Thu Jun 9 19:57:53 2005
+@@ -4,5 +4,5 @@
+ * A photo image file handler for TIFF files.
+ *
+- * Uses the libtiff.so library, which is dynamically
++ * Uses the libTIFFso library, which is dynamically
+ * loaded only when used.
+ *
+@@ -40,9 +40,9 @@
+
+ #ifdef __WIN32__
+-#define TIFF_LIB_NAME "tiff.dll"
++#define TIFF_LIB_NAME "TIFFdll"
+ #endif
+
+ #ifndef TIFF_LIB_NAME
+-#define TIFF_LIB_NAME "libtiff.so"
++#define TIFF_LIB_NAME "libTIFFso"
+ #endif
+
+@@ -78,73 +78,4 @@
+ };
+
+-static struct TiffFunctions {
+- VOID *handle;
+- void (* Close) _ANSI_ARGS_((TIFF *));
+- int (* GetField) _ANSI_ARGS_(TCL_VARARGS(TIFF *, tif));
+- int (* GetFieldDefaulted) _ANSI_ARGS_(TCL_VARARGS(TIFF *,tif));
+- TIFF* (* Open) _ANSI_ARGS_((CONST char*, CONST char*));
+- int (* ReadEncodedStrip) _ANSI_ARGS_((TIFF*, tstrip_t, tdata_t, tsize_t));
+- int (* ReadRGBAImage) _ANSI_ARGS_((TIFF *, uint32, uint32, uint32*, int));
+- int (* ReadTile) _ANSI_ARGS_((TIFF *, uint32, uint32, uint32*, int));
+- int (* SetField) _ANSI_ARGS_(TCL_VARARGS(TIFF *, tif));
+- tsize_t (* TileSize) _ANSI_ARGS_((TIFF*));
+- int (* WriteEncodedStrip) _ANSI_ARGS_((TIFF*, tstrip_t, tdata_t, tsize_t));
+- void (* free) _ANSI_ARGS_((tdata_t));
+- tdata_t (* malloc) _ANSI_ARGS_((tsize_t));
+- tdata_t (* memcpy) _ANSI_ARGS_((tdata_t, tdata_t, tsize_t));
+- tdata_t (* realloc) _ANSI_ARGS_((tdata_t, tsize_t));
+- TIFFErrorHandler (* SetErrorHandler) _ANSI_ARGS_((TIFFErrorHandler));
+- TIFFErrorHandler (* SetWarningHandler) _ANSI_ARGS_((TIFFErrorHandler));
+- TIFF* (* ClientOpen) _ANSI_ARGS_((CONST char*, CONST char*, VOID *,
+- TIFFReadWriteProc, TIFFReadWriteProc, TIFFSeekProc,
+- TIFFCloseProc, TIFFSizeProc, TIFFMapFileProc, TIFFUnmapFileProc));
+- TIFFCodec* (*RegisterCODEC) _ANSI_ARGS_((uint16, CONST char*, VOID *));
+- void (* Error) _ANSI_ARGS_(TCL_VARARGS(CONST char *, arg1));
+- int (* PredictorInit) _ANSI_ARGS_((TIFF *));
+- void (* MergeFieldInfo) _ANSI_ARGS_((TIFF *, CONST VOID *, int));
+- int (* FlushData1) _ANSI_ARGS_((TIFF *));
+- void (* NoPostDecode) _ANSI_ARGS_((TIFF *, VOID*, tsize_t));
+- tsize_t (* TileRowSize) _ANSI_ARGS_((TIFF *));
+- tsize_t (* ScanlineSize) _ANSI_ARGS_((TIFF *));
+- void (* setByteArray) _ANSI_ARGS_((VOID **, VOID*, long));
+- int (* VSetField) _ANSI_ARGS_((TIFF *, ttag_t, va_list));
+- void (* SwabArrayOfShort) _ANSI_ARGS_((uint16*, unsigned long));
+-} tiff = {0};
+-
+-static char *symbols[] = {
+- "TIFFClose",
+- "TIFFGetField",
+- "TIFFGetFieldDefaulted",
+- "TIFFOpen",
+- "TIFFReadEncodedStrip",
+- "TIFFReadRGBAImage",
+- "TIFFReadTile",
+- "TIFFSetField",
+- "TIFFTileSize",
+- "TIFFWriteEncodedStrip",
+- /* The following symbols are not crucial. If they cannot be
+- found, just don't use them. The ClientOpen function is
+- more difficult to emulate, but even that is possible. */
+- "_TIFFfree",
+- "_TIFFmalloc",
+- "_TIFFmemcpy",
+- "_TIFFrealloc",
+- "TIFFSetErrorHandler",
+- "TIFFSetWarningHandler",
+- "TIFFClientOpen",
+- "TIFFRegisterCODEC", /* not in libtiff.def */
+- "TIFFError",
+- "TIFFPredictorInit", /* not in libtiff.def */
+- "_TIFFMergeFieldInfo", /* not in libtiff.def */
+- "TIFFFlushData1", /* not in libtiff.def */
+- "_TIFFNoPostDecode", /* not in libtiff.def */
+- "TIFFTileRowSize",
+- "TIFFScanlineSize",
+- "_TIFFsetByteArray", /* not in libtiff.def */
+- "TIFFVSetField",
+- "TIFFSwabArrayOfShort",
+- (char *) NULL
+-};
+-
+ /*
+ * Prototypes for local procedures defined in this file:
+@@ -162,166 +93,5 @@
+ static int ParseWriteFormat _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Obj *format,
+ int *comp, char **mode));
+-static int load_tiff_library _ANSI_ARGS_((Tcl_Interp *interp));
+ static void _TIFFerr _ANSI_ARGS_((CONST char *, CONST char *, va_list));
+-static void _TIFFwarn _ANSI_ARGS_((CONST char *, CONST char *, va_list));
+-void ImgTIFFfree _ANSI_ARGS_((tdata_t data));
+-tdata_t ImgTIFFmalloc _ANSI_ARGS_((tsize_t size));
+-tdata_t ImgTIFFrealloc _ANSI_ARGS_((tdata_t data, tsize_t size));
+-tdata_t ImgTIFFmemcpy _ANSI_ARGS_((tdata_t, tdata_t, tsize_t));
+-void ImgTIFFError _ANSI_ARGS_(TCL_VARARGS(CONST char *, module));
+-int ImgTIFFPredictorInit _ANSI_ARGS_((TIFF *tif));
+-void ImgTIFFMergeFieldInfo _ANSI_ARGS_((TIFF* tif, CONST VOID *voidp, int i));
+-int ImgTIFFFlushData1 _ANSI_ARGS_((TIFF *tif));
+-void ImgTIFFNoPostDecode _ANSI_ARGS_((TIFF *, VOID *, tsize_t));
+-tsize_t ImgTIFFTileRowSize _ANSI_ARGS_((TIFF *));
+-tsize_t ImgTIFFScanlineSize _ANSI_ARGS_((TIFF *));
+-void ImgTIFFsetByteArray _ANSI_ARGS_((VOID **, VOID*, long));
+-int ImgTIFFSetField _ANSI_ARGS_(TCL_VARARGS(TIFF *, tif));
+-tsize_t ImgTIFFTileSize _ANSI_ARGS_((TIFF*));
+-void ImgTIFFSwabArrayOfShort _ANSI_ARGS_((uint16*, unsigned long));
+-
+-/*
+- * External hooks to functions, so they can be called from
+- * imgTIFFzip.c and imgTIFFjpeg.c as well.
+- */
+-
+-void ImgTIFFfree (data)
+- tdata_t data;
+-{
+- if (tiff.free) {
+- tiff.free(data);
+- } else {
+- ckfree((char *) data);
+- }
+-}
+-
+-tdata_t ImgTIFFmalloc(size)
+- tsize_t size;
+-{
+- if (tiff.malloc) {
+- return tiff.malloc(size);
+- } else {
+- return ckalloc(size);
+- }
+-}
+-
+-tdata_t ImgTIFFrealloc(data, size)
+- tdata_t data;
+- tsize_t size;
+-{
+- if (tiff.realloc) {
+- return tiff.realloc(data, size);
+- } else {
+- return ckrealloc(data, size);
+- }
+-}
+-
+-tdata_t
+-ImgTIFFmemcpy(a,b,c)
+- tdata_t a;
+- tdata_t b;
+- tsize_t c;
+-{
+- return tiff.memcpy(a,b,c);
+-}
+-
+-void
+-ImgTIFFError TCL_VARARGS_DEF(CONST char *, arg1)
+-{
+- va_list ap;
+- CONST char* module;
+- CONST char* fmt;
+-
+- module = (CONST char*) TCL_VARARGS_START(CONST char *, arg1, ap);
+- fmt = va_arg(ap, CONST char *);
+- _TIFFerr(module, fmt, ap);
+- va_end(ap);
+-}
+-
+-int
+-ImgTIFFPredictorInit(tif)
+- TIFF *tif;
+-{
+- return tiff.PredictorInit(tif);
+-}
+-
+-void
+-ImgTIFFMergeFieldInfo(tif, voidp, i)
+- TIFF* tif;
+- CONST VOID *voidp;
+- int i;
+-{
+- tiff.MergeFieldInfo(tif, voidp, i);
+-}
+-
+-int
+-ImgTIFFFlushData1(tif)
+- TIFF *tif;
+-{
+- return tiff.FlushData1(tif);
+-}
+-
+-void
+-ImgTIFFNoPostDecode(tif,a,b)
+- TIFF * tif;
+- VOID *a;
+- tsize_t b;
+-{
+- tiff.NoPostDecode(tif, a, b);
+-}
+-
+-tsize_t
+-ImgTIFFTileRowSize(tif)
+- TIFF * tif;
+-{
+- return tiff.TileRowSize(tif);
+-}
+-
+-tsize_t
+-ImgTIFFScanlineSize(tif)
+- TIFF *tif;
+-{
+- return tiff.ScanlineSize(tif);
+-}
+-
+-void
+-ImgTIFFsetByteArray(a,b,c)
+- VOID **a;
+- VOID *b;
+- long c;
+-{
+- tiff.setByteArray(a,b,c);
+-}
+-
+-int
+-ImgTIFFSetField TCL_VARARGS_DEF(TIFF*, arg1)
+-{
+- va_list ap;
+- TIFF* tif;
+- ttag_t tag;
+- int result;
+-
+- tif = (TIFF*) TCL_VARARGS_START(TIFF*, arg1, ap);
+- tag = va_arg(ap, ttag_t);
+- result = tiff.VSetField(tif, tag, ap);
+- va_end(ap);
+- return result;
+-}
+-
+-tsize_t
+-ImgTIFFTileSize(tif)
+- TIFF* tif;
+-{
+- return tiff.TileSize(tif);
+-}
+-
+-void
+-ImgTIFFSwabArrayOfShort(p, l)
+- uint16* p;
+- unsigned long l;
+-{
+- tiff.SwabArrayOfShort(p,l);
+- return;
+-}
+
+ /*
+@@ -369,37 +139,15 @@
+ }
+
+-static int
+-load_tiff_library(interp)
+- Tcl_Interp *interp;
++static void
++initialize(void)
+ {
+- static int initialized = 0;
+- if (errorMessage) {
+- ckfree(errorMessage);
+- errorMessage = NULL;
+- }
+- if (ImgLoadLib(interp, TIFF_LIB_NAME, &tiff.handle, symbols, 10)
+- != TCL_OK) {
+- return TCL_ERROR;
+- }
+- if (tiff.SetErrorHandler != NULL) {
+- tiff.SetErrorHandler(_TIFFerr);
+- }
+- if (tiff.SetWarningHandler != NULL) {
+- tiff.SetWarningHandler(_TIFFwarn);
+- }
++ static int initialized;
++
+ if (!initialized) {
++ TIFFSetErrorHandler(_TIFFerr);
+ initialized = 1;
+- if (tiff.RegisterCODEC && tiff.Error && tiff.PredictorInit &&
+- tiff.MergeFieldInfo && tiff.FlushData1 && tiff.NoPostDecode &&
+- tiff.TileRowSize && tiff.ScanlineSize && tiff.setByteArray &&
+- tiff.VSetField && tiff.SwabArrayOfShort) {
+- tiff.RegisterCODEC(COMPRESSION_DEFLATE, "Deflate", ImgInitTIFFzip);
+- tiff.RegisterCODEC(COMPRESSION_JPEG, "JPEG", ImgInitTIFFjpeg);
+- tiff.RegisterCODEC(COMPRESSION_PIXARLOG, "PixarLog", ImgInitTIFFpixar);
+- }
+ }
+- return TCL_OK;
+ }
+-
++
+ static void _TIFFerr(module, fmt, ap)
+ CONST char *module;
+@@ -423,12 +171,4 @@
+ }
+
+-/* warnings are not processed in Tcl */
+-static void _TIFFwarn(module, fmt, ap)
+- CONST char *module;
+- CONST char *fmt;
+- va_list ap;
+-{
+-}
+-
+ static int
+ mapDummy(fd, base, size)
+@@ -686,12 +426,9 @@
+ TIFF *tif;
+ char tempFileName[256];
+- int count, result;
++ int result;
+ MFile handle;
+- char buffer[1024];
+ char *dataPtr = NULL;
+
+- if (load_tiff_library(interp) != TCL_OK) {
+- return TCL_ERROR;
+- }
++ initialize();
+
+ if (!ImgReadInit(data, '\115', &handle)) {
+@@ -699,36 +436,14 @@
+ }
+
+- if (tiff.ClientOpen) {
+- tempFileName[0] = 0;
+- if (handle.state != IMG_STRING) {
+- dataPtr = ckalloc((handle.length*3)/4 + 2);
+- handle.length = ImgRead(&handle, dataPtr, handle.length);
+- handle.data = dataPtr;
+- }
+- handle.state = 0;
+- tif = tiff.ClientOpen("inline data", "r", (thandle_t) &handle,
+- readString, writeString, seekString, closeDummy,
+- sizeString, mapDummy, unMapDummy);
+- } else {
+- Tcl_Channel outchan;
+- tmpnam(tempFileName);
+- outchan = ImgOpenFileChannel(interp, tempFileName, 0644);
+- if (!outchan) {
+- return TCL_ERROR;
+- }
+-
+- count = ImgRead(&handle, buffer, 1024);
+- while (count == 1024) {
+- Tcl_Write(outchan, buffer, count);
+- count = ImgRead(&handle, buffer, 1024);
+- }
+- if (count>0){
+- Tcl_Write(outchan, buffer, count);
+- }
+- if (Tcl_Close(interp, outchan) == TCL_ERROR) {
+- return TCL_ERROR;
+- }
+- tif = tiff.Open(tempFileName, "r");
+- }
++ tempFileName[0] = 0;
++ if (handle.state != IMG_STRING) {
++ dataPtr = ckalloc((handle.length*3)/4 + 2);
++ handle.length = ImgRead(&handle, dataPtr, handle.length);
++ handle.data = dataPtr;
++ }
++ handle.state = 0;
++ tif = TIFFClientOpen("inline data", "r", (thandle_t) &handle,
++ readString, writeString, seekString, closeDummy,
++ sizeString, mapDummy, unMapDummy);
+
+ if (tif != NULL) {
+@@ -765,41 +480,16 @@
+ TIFF *tif;
+ char tempFileName[256];
+- int count, result;
+- char buffer[1024];
+-
+- if (load_tiff_library(interp) != TCL_OK) {
+- return TCL_ERROR;
+- }
++ int result;
++ MFile handle;
+
+- if (tiff.ClientOpen) {
+- MFile handle;
+- tempFileName[0] = 0;
+- handle.data = (char *) chan;
+- handle.state = IMG_CHAN;
+- tif = tiff.ClientOpen(fileName, "r", (thandle_t) &handle,
+- readMFile, writeDummy, seekMFile, closeDummy,
+- sizeMFile, mapDummy, unMapDummy);
+- } else {
+- Tcl_Channel outchan;
+- tmpnam(tempFileName);
+- outchan = ImgOpenFileChannel(interp, tempFileName, 0644);
+- if (!outchan) {
+- return TCL_ERROR;
+- }
++ initialize();
+
+- count = Tcl_Read(chan, buffer, 1024);
+- while (count == 1024) {
+- Tcl_Write(outchan, buffer, count);
+- count = Tcl_Read(chan, buffer, 1024);
+- }
+- if (count>0){
+- Tcl_Write(outchan, buffer, count);
+- }
+- if (Tcl_Close(interp, outchan) == TCL_ERROR) {
+- return TCL_ERROR;
+- }
++ tempFileName[0] = 0;
++ handle.data = (char *) chan;
++ handle.state = IMG_CHAN;
++ tif = TIFFClientOpen(fileName, "r", (thandle_t) &handle,
++ readMFile, writeDummy, seekMFile, closeDummy,
++ sizeMFile, mapDummy, unMapDummy);
+
+- tif = tiff.Open(tempFileName, "r");
+- }
+ if (tif) {
+ result = CommonReadTIFF(interp, tif, format, imageHandle,
+@@ -857,12 +547,8 @@
+ block.pixelSize = sizeof (uint32);
+
+- tiff.GetField(tif, TIFFTAG_IMAGEWIDTH, &w);
+- tiff.GetField(tif, TIFFTAG_IMAGELENGTH, &h);
++ TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w);
++ TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h);
+ npixels = w * h;
+- if (tiff.malloc == NULL) {
+- raster = (uint32 *) ckalloc(npixels * sizeof (uint32));
+- } else {
+- raster = (uint32 *) tiff.malloc(npixels * sizeof (uint32));
+- }
++ raster = _TIFFmalloc(npixels * sizeof (uint32));
+ block.width = w;
+ block.height = h;
+@@ -874,10 +560,6 @@
+ }
+
+- if (!tiff.ReadRGBAImage(tif, w, h, raster, 0) || errorMessage) {
+- if (tiff.free == NULL) {
+- ckfree((char *)raster);
+- } else {
+- tiff.free((char *)raster);
+- }
++ if (!TIFFReadRGBAImage(tif, w, h, raster, 0) || errorMessage) {
++ _TIFFfree(raster);
+ if (errorMessage) {
+ Tcl_AppendResult(interp, errorMessage, (char *) NULL);
+@@ -894,10 +576,6 @@
+ destY, width, height);
+
+- if (tiff.free == NULL) {
+- ckfree((char *)raster);
+- } else {
+- tiff.free((char *)raster);
+- }
+- tiff.Close(tif);
++ _TIFFfree(raster);
++ TIFFClose(tif);
+ return TCL_OK;
+ }
+@@ -917,7 +595,5 @@
+ Tcl_DString data;
+
+- if (load_tiff_library(interp) != TCL_OK) {
+- return TCL_ERROR;
+- }
++ initialize();
+
+ ImgFixStringWriteProc(&data, &interp, &dataPtr, &format, &blockPtr);
+@@ -927,18 +603,13 @@
+ }
+
+- if (tiff.ClientOpen) {
+- tempFileName[0] = 0;
+- Tcl_DStringInit(&dstring);
+- ImgWriteInit(&dstring, &handle);
+- tif = tiff.ClientOpen("inline data", mode, (thandle_t) &handle,
+- readString, writeString, seekString, closeDummy,
+- sizeString, mapDummy, unMapDummy);
+- } else {
+- tmpnam(tempFileName);
+- tif = tiff.Open(tempFileName,mode);
+- }
++ tempFileName[0] = 0;
++ Tcl_DStringInit(&dstring);
++ ImgWriteInit(&dstring, &handle);
++ tif = TIFFClientOpen("inline data", mode, (thandle_t) &handle,
++ readString, writeString, seekString, closeDummy,
++ sizeString, mapDummy, unMapDummy);
+
+ result = CommonWriteTIFF(interp, tif, comp, blockPtr);
+- tiff.Close(tif);
++ TIFFClose(tif);
+
+ if (result != TCL_OK) {
+@@ -999,8 +670,5 @@
+ }
+
+- if (load_tiff_library(interp) != TCL_OK) {
+- Tcl_DStringFree(&nameBuffer);
+- return TCL_ERROR;
+- }
++ initialize();
+
+ if (ParseWriteFormat(interp, format, &comp, &mode) != TCL_OK) {
+@@ -1009,5 +677,5 @@
+ }
+
+- if (!(tif = tiff.Open(fullname, mode))) {
++ if (!(tif = TIFFOpen(fullname, mode))) {
+ Tcl_AppendResult(interp, filename, ": ", Tcl_PosixError(interp),
+ (char *)NULL);
+@@ -1019,5 +687,5 @@
+
+ result = CommonWriteTIFF(interp, tif, comp, blockPtr);
+- tiff.Close(tif);
++ TIFFClose(tif);
+ return result;
+ }
+@@ -1029,5 +697,5 @@
+ char **mode;
+ {
+- static char *tiffWriteOptions[] = {"-compression", "-byteorder"};
++ static const char *tiffWriteOptions[] = {"-compression", "-byteorder"};
+ int objc, length, c, i, index;
+ Tcl_Obj **objv;
+@@ -1112,27 +780,27 @@
+ unsigned char *data = NULL;
+
+- tiff.SetField(tif, TIFFTAG_IMAGEWIDTH, blockPtr->width);
+- tiff.SetField(tif, TIFFTAG_IMAGELENGTH, blockPtr->height);
+- tiff.SetField(tif, TIFFTAG_COMPRESSION, comp);
+-
+- tiff.SetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
+- tiff.SetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
+- tiff.SetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
+- tiff.SetField(tif, TIFFTAG_ROWSPERSTRIP, blockPtr->height);
+-
+- tiff.SetField(tif, TIFFTAG_RESOLUTIONUNIT, (int)2);
+- tiff.SetField(tif, TIFFTAG_XRESOLUTION, (float)1200.0);
+- tiff.SetField(tif, TIFFTAG_YRESOLUTION, (float)1200.0);
++ TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, blockPtr->width);
++ TIFFSetField(tif, TIFFTAG_IMAGELENGTH, blockPtr->height);
++ TIFFSetField(tif, TIFFTAG_COMPRESSION, comp);
++
++ TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
++ TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
++ TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
++ TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, blockPtr->height);
++
++ TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, (int)2);
++ TIFFSetField(tif, TIFFTAG_XRESOLUTION, (float)1200.0);
++ TIFFSetField(tif, TIFFTAG_YRESOLUTION, (float)1200.0);
+
+- tiff.SetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
++ TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
+ if ((blockPtr->offset[0] == blockPtr->offset[1])
+ && (blockPtr->offset[0] == blockPtr->offset[2])) {
+ numsamples = 1;
+- tiff.SetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
+- tiff.SetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
++ TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
++ TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
+ } else {
+ numsamples = 3;
+- tiff.SetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3);
+- tiff.SetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
++ TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3);
++ TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
+ }
+
+@@ -1186,5 +854,5 @@
+ }
+
+- tiff.WriteEncodedStrip(tif, 0, data,
++ TIFFWriteEncodedStrip(tif, 0, data,
+ numsamples * blockPtr->width * blockPtr->height);
+ if (data != blockPtr->pixelPtr) {