Vincent Povirk : windowscodecs: Implement TiffFrameDecode_CopyPalette.
Alexandre Julliard
julliard at winehq.org
Thu Oct 21 10:50:43 CDT 2010
Module: wine
Branch: master
Commit: 0ce1c796e4adda517727bd54fb96363e611c8be7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0ce1c796e4adda517727bd54fb96363e611c8be7
Author: Vincent Povirk <vincent at codeweavers.com>
Date: Sat May 29 12:09:56 2010 -0500
windowscodecs: Implement TiffFrameDecode_CopyPalette.
---
dlls/windowscodecs/tiffformat.c | 30 ++++++++++++++++++++++++++++--
1 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c
index 1256110..f48d734 100644
--- a/dlls/windowscodecs/tiffformat.c
+++ b/dlls/windowscodecs/tiffformat.c
@@ -692,8 +692,34 @@ static HRESULT WINAPI TiffFrameDecode_GetResolution(IWICBitmapFrameDecode *iface
static HRESULT WINAPI TiffFrameDecode_CopyPalette(IWICBitmapFrameDecode *iface,
IWICPalette *pIPalette)
{
- FIXME("(%p,%p)\n", iface, pIPalette);
- return E_NOTIMPL;
+ TiffFrameDecode *This = (TiffFrameDecode*)iface;
+ uint16 *red, *green, *blue;
+ WICColor colors[256];
+ int color_count, ret, i;
+
+ TRACE("(%p,%p)\n", iface, pIPalette);
+
+ color_count = 1<<This->decode_info.bps;
+
+ EnterCriticalSection(&This->parent->lock);
+ ret = pTIFFGetField(This->parent->tiff, TIFFTAG_COLORMAP, &red, &green, &blue);
+ LeaveCriticalSection(&This->parent->lock);
+
+ if (!ret)
+ {
+ WARN("Couldn't read color map\n");
+ return E_FAIL;
+ }
+
+ for (i=0; i<color_count; i++)
+ {
+ colors[i] = 0xff000000 |
+ ((red[i]<<8) & 0xff0000) |
+ (green[i] & 0xff00) |
+ ((blue[i]>>8) & 0xff);
+ }
+
+ return IWICPalette_InitializeCustom(pIPalette, colors, color_count);
}
static HRESULT TiffFrameDecode_ReadTile(TiffFrameDecode *This, UINT tile_x, UINT tile_y)
More information about the wine-cvs
mailing list