Commit 54800a80 authored by Dmitry Timoshkov's avatar Dmitry Timoshkov Committed by Alexandre Julliard

windowscodecs: Implement IWICBitmapDecoder_CopyPalette for the GIF decoder.

parent af8b90c1
......@@ -1165,11 +1165,34 @@ static HRESULT WINAPI GifDecoder_GetDecoderInfo(IWICBitmapDecoder *iface,
return hr;
}
static HRESULT WINAPI GifDecoder_CopyPalette(IWICBitmapDecoder *iface,
IWICPalette *pIPalette)
static HRESULT WINAPI GifDecoder_CopyPalette(IWICBitmapDecoder *iface, IWICPalette *palette)
{
TRACE("(%p,%p)\n", iface, pIPalette);
return WINCODEC_ERR_FRAMEMISSING;
GifDecoder *This = impl_from_IWICBitmapDecoder(iface);
WICColor colors[256];
ColorMapObject *cm;
int i;
TRACE("(%p,%p)\n", iface, palette);
cm = This->gif->SColorMap;
if (!cm) return WINCODEC_ERR_FRAMEMISSING;
if (cm->ColorCount > 256)
{
ERR("GIF contains invalid number of colors: %d\n", cm->ColorCount);
return E_FAIL;
}
for (i = 0; i < cm->ColorCount; i++)
{
colors[i] = 0xff000000 | /* alpha */
cm->Colors[i].Red << 16 |
cm->Colors[i].Green << 8 |
cm->Colors[i].Blue;
}
/* FIXME: transparent color? */
return IWICPalette_InitializeCustom(palette, colors, cm->ColorCount);
}
static HRESULT WINAPI GifDecoder_GetMetadataQueryReader(IWICBitmapDecoder *iface,
......
......@@ -103,23 +103,21 @@ static void test_global_gif_palette(void)
/* global palette */
hr = IWICBitmapDecoder_CopyPalette(decoder, palette);
todo_wine
ok(hr == S_OK, "CopyPalette error %#x\n", hr);
hr = IWICPalette_GetColorCount(palette, &count);
ok(hr == S_OK, "GetColorCount error %#x\n", hr);
todo_wine
ok(count == 4, "expected 4, got %u\n", count);
hr = IWICPalette_GetColors(palette, count, color, &ret);
ok(hr == S_OK, "GetColors error %#x\n", hr);
ok(ret == count, "expected %u, got %u\n", count, ret);
todo_wine {
ok(color[0] == 0xff010203, "expected 0xff010203, got %#x\n", color[0]);
todo_wine
ok(color[1] == 0x00040506, "expected 0x00040506, got %#x\n", color[1]);
ok(color[2] == 0xff070809, "expected 0xff070809, got %#x\n", color[2]);
ok(color[3] == 0xff0a0b0c, "expected 0xff0a0b0c, got %#x\n", color[3]);
}
/* frame palette */
hr = IWICBitmapDecoder_GetFrame(decoder, 0, &frame);
ok(hr == S_OK, "GetFrame error %#x\n", hr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment