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