# HG changeset patch # User Juanma Barranquero # Date 1044010753 0 # Node ID 954b23b1037b1f38ae38463f337dc2085f1baa96 # Parent 6ec2d998c53bbab0390e211a2510e491aeecaf79 (init_tiff_functions): New function. (tiff_load): Adjust colors for Windows. Disable color table lookups. Call library functions through pointers determined at runtime. (init_external_image_libraries): Try to load libtiff.dll. diff -r 6ec2d998c53b -r 954b23b1037b src/w32fns.c --- a/src/w32fns.c Fri Jan 31 07:27:59 2003 +0000 +++ b/src/w32fns.c Fri Jan 31 10:59:13 2003 +0000 @@ -12621,6 +12621,28 @@ NULL }; +/* TIFF library details. */ +DEF_IMGLIB_FN (TIFFSetErrorHandler); +DEF_IMGLIB_FN (TIFFSetWarningHandler); +DEF_IMGLIB_FN (TIFFOpen); +DEF_IMGLIB_FN (TIFFClientOpen); +DEF_IMGLIB_FN (TIFFGetField); +DEF_IMGLIB_FN (TIFFReadRGBAImage); +DEF_IMGLIB_FN (TIFFClose); + +static int +init_tiff_functions (library) + HMODULE library; +{ + LOAD_IMGLIB_FN (library, TIFFSetErrorHandler); + LOAD_IMGLIB_FN (library, TIFFSetWarningHandler); + LOAD_IMGLIB_FN (library, TIFFOpen); + LOAD_IMGLIB_FN (library, TIFFClientOpen); + LOAD_IMGLIB_FN (library, TIFFGetField); + LOAD_IMGLIB_FN (library, TIFFReadRGBAImage); + LOAD_IMGLIB_FN (library, TIFFClose); + return 1; +} /* Return non-zero if OBJECT is a valid TIFF image specification. */ @@ -12800,8 +12822,8 @@ file = Qnil; GCPRO1 (file); - TIFFSetErrorHandler (tiff_error_handler); - TIFFSetWarningHandler (tiff_warning_handler); + fn_TIFFSetErrorHandler (tiff_error_handler); + fn_TIFFSetWarningHandler (tiff_warning_handler); if (NILP (specified_data)) { @@ -12815,7 +12837,7 @@ } /* Try to open the image file. */ - tiff = TIFFOpen (SDATA (file), "r"); + tiff = fn_TIFFOpen (SDATA (file), "r"); if (tiff == NULL) { image_error ("Cannot open `%s'", file, Qnil); @@ -12830,14 +12852,14 @@ memsrc.len = SBYTES (specified_data); memsrc.index = 0; - tiff = TIFFClientOpen ("memory_source", "r", &memsrc, - (TIFFReadWriteProc) tiff_read_from_memory, - (TIFFReadWriteProc) tiff_write_from_memory, - tiff_seek_in_memory, - tiff_close_memory, - tiff_size_of_memory, - tiff_mmap_memory, - tiff_unmap_memory); + tiff = fn_TIFFClientOpen ("memory_source", "r", &memsrc, + (TIFFReadWriteProc) tiff_read_from_memory, + (TIFFReadWriteProc) tiff_write_from_memory, + tiff_seek_in_memory, + tiff_close_memory, + tiff_size_of_memory, + tiff_mmap_memory, + tiff_unmap_memory); if (!tiff) { @@ -12849,12 +12871,12 @@ /* Get width and height of the image, and allocate a raster buffer of width x height 32-bit values. */ - TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width); - TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height); + fn_TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width); + fn_TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height); buf = (uint32 *) xmalloc (width * height * sizeof *buf); - rc = TIFFReadRGBAImage (tiff, width, height, buf, 0); - TIFFClose (tiff); + rc = fn_TIFFReadRGBAImage (tiff, width, height, buf, 0); + fn_TIFFClose (tiff); if (!rc) { image_error ("Error reading TIFF image `%s'", img->spec, Qnil); @@ -12871,8 +12893,10 @@ return 0; } +#if 0 /* TODO: Color tables. */ /* Initialize the color table. */ init_color_table (); +#endif /* Process the pixel raster. Origin is in the lower-left corner. */ for (y = 0; y < height; ++y) @@ -12882,16 +12906,22 @@ for (x = 0; x < width; ++x) { uint32 abgr = row[x]; - int r = TIFFGetR (abgr) << 8; - int g = TIFFGetG (abgr) << 8; - int b = TIFFGetB (abgr) << 8; + int r = TIFFGetR (abgr); + int g = TIFFGetG (abgr); + int b = TIFFGetB (abgr); +#if 0 /* TODO: Color tables. */ XPutPixel (ximg, x, height - 1 - y, lookup_rgb_color (f, r, g, b)); - } - } - +#else + XPutPixel (ximg, x, height - 1 - y, PALETTERGB (r, g, b)); +#endif + } + } + +#if 0 /* TODO: Color tables. */ /* Remember the colors allocated for the image. Free the color table. */ img->colors = colors_in_color_table (&img->ncolors); free_color_table (); +#endif img->width = width; img->height = height; @@ -15719,7 +15749,11 @@ #endif #if HAVE_TIFF - define_image_type (&tiff_type); + if (library = LoadLibrary ("libtiff.dll")) + { + if (init_tiff_functions (library)) + define_image_type (&tiff_type); + } #endif #if HAVE_GIF