windowscodecs: Generate global GIF palette even a real one is missing.

This commit is contained in:
Dmitry Timoshkov 2013-07-19 15:29:58 +09:00 committed by Alexandre Julliard
parent f6c73a227b
commit 3738c6b05c
2 changed files with 26 additions and 14 deletions

View File

@ -1180,26 +1180,39 @@ static HRESULT WINAPI GifDecoder_CopyPalette(IWICBitmapDecoder *iface, IWICPalet
GifDecoder *This = impl_from_IWICBitmapDecoder(iface);
WICColor colors[256];
ColorMapObject *cm;
int i, trans;
int i, trans, count;
ExtensionBlock *eb;
TRACE("(%p,%p)\n", iface, palette);
cm = This->gif->SColorMap;
if (!cm) return WINCODEC_ERR_FRAMEMISSING;
if (cm->ColorCount > 256)
if (cm)
{
ERR("GIF contains invalid number of colors: %d\n", cm->ColorCount);
return E_FAIL;
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;
}
count = cm->ColorCount;
}
for (i = 0; i < cm->ColorCount; i++)
else
{
colors[i] = 0xff000000 | /* alpha */
cm->Colors[i].Red << 16 |
cm->Colors[i].Green << 8 |
cm->Colors[i].Blue;
colors[0] = 0xff000000;
colors[1] = 0xffffffff;
for (i = 2; i < 256; i++)
colors[i] = 0xff000000;
count = 256;
}
/* look for the transparent color extension */
@ -1217,7 +1230,7 @@ static HRESULT WINAPI GifDecoder_CopyPalette(IWICBitmapDecoder *iface, IWICPalet
}
}
return IWICPalette_InitializeCustom(palette, colors, cm->ColorCount);
return IWICPalette_InitializeCustom(palette, colors, count);
}
static HRESULT WINAPI GifDecoder_GetMetadataQueryReader(IWICBitmapDecoder *iface,

View File

@ -284,7 +284,6 @@ static void test_local_gif_palette(void)
/* global palette */
hr = IWICBitmapDecoder_CopyPalette(decoder, palette);
todo_wine
ok(hr == S_OK || broken(hr == WINCODEC_ERR_FRAMEMISSING), "CopyPalette %#x\n", hr);
if (hr == S_OK)
{