windowscodecs: Implement IWICBitmapDecoder_CopyPalette for the GIF decoder.
This commit is contained in:
parent
af8b90c106
commit
54800a8074
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue