Vincent Povirk : windowscodecs: Add support for decoding RGB TIFF images.
Alexandre Julliard
julliard at winehq.org
Mon Mar 22 11:12:03 CDT 2010
Module: wine
Branch: master
Commit: 416eb191cb555134eb0513a76d19d26f2e946f70
URL: http://source.winehq.org/git/wine.git/?a=commit;h=416eb191cb555134eb0513a76d19d26f2e946f70
Author: Vincent Povirk <vincent at codeweavers.com>
Date: Fri Mar 19 17:11:50 2010 -0500
windowscodecs: Add support for decoding RGB TIFF images.
---
dlls/windowscodecs/tiffformat.c | 45 +++++++++++++++++++++++++++++++++++++-
1 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c
index 2b93c74..fe87ddd 100644
--- a/dlls/windowscodecs/tiffformat.c
+++ b/dlls/windowscodecs/tiffformat.c
@@ -220,7 +220,7 @@ static const IWICBitmapFrameDecodeVtbl TiffFrameDecode_Vtbl;
static HRESULT tiff_get_decode_info(TIFF *tiff, tiff_decode_info *decode_info)
{
- uint16 photometric, bps;
+ uint16 photometric, bps, samples, planar;
int ret;
decode_info->indexed = 0;
@@ -256,6 +256,29 @@ static HRESULT tiff_get_decode_info(TIFF *tiff, tiff_decode_info *decode_info)
return E_FAIL;
}
break;
+ case 2: /* RGB */
+ if (bps != 8)
+ {
+ FIXME("unhandled RGB bit count %u\n", bps);
+ return E_FAIL;
+ }
+ ret = pTIFFGetField(tiff, TIFFTAG_SAMPLESPERPIXEL, &samples);
+ if (samples != 3)
+ {
+ FIXME("unhandled RGB sample count %u\n", samples);
+ return E_FAIL;
+ }
+ ret = pTIFFGetField(tiff, TIFFTAG_PLANARCONFIG, &planar);
+ if (!ret) planar = 1;
+ if (planar != 1)
+ {
+ FIXME("unhandled planar configuration %u\n", planar);
+ return E_FAIL;
+ }
+ decode_info->bpp = bps * samples;
+ decode_info->reverse_bgr = 1;
+ decode_info->format = &GUID_WICPixelFormat24bppBGR;
+ break;
case 3: /* RGB Palette */
decode_info->indexed = 1;
decode_info->bpp = bps;
@@ -273,7 +296,6 @@ static HRESULT tiff_get_decode_info(TIFF *tiff, tiff_decode_info *decode_info)
}
break;
case 0: /* WhiteIsZero */
- case 2: /* RGB */
case 4: /* Transparency mask */
case 5: /* CMYK */
case 6: /* YCbCr */
@@ -651,6 +673,25 @@ static HRESULT TiffFrameDecode_ReadTile(TiffFrameDecode *This, UINT tile_x, UINT
hr = E_FAIL;
}
+ if (hr == S_OK && This->decode_info.reverse_bgr)
+ {
+ if (This->decode_info.format == &GUID_WICPixelFormat24bppBGR)
+ {
+ UINT i, total_pixels;
+ BYTE *pixel, temp;
+
+ total_pixels = This->decode_info.tile_width * This->decode_info.tile_height;
+ pixel = This->cached_tile;
+ for (i=0; i<total_pixels; i++)
+ {
+ temp = pixel[2];
+ pixel[2] = pixel[0];
+ pixel[0] = temp;
+ pixel += 3;
+ }
+ }
+ }
+
if (hr == S_OK)
{
This->cached_tile_x = tile_x;
More information about the wine-cvs
mailing list