windowscodecs: Generate global GIF palette even a real one is missing.
This commit is contained in:
parent
f6c73a227b
commit
3738c6b05c
|
@ -1180,26 +1180,39 @@ static HRESULT WINAPI GifDecoder_CopyPalette(IWICBitmapDecoder *iface, IWICPalet
|
||||||
GifDecoder *This = impl_from_IWICBitmapDecoder(iface);
|
GifDecoder *This = impl_from_IWICBitmapDecoder(iface);
|
||||||
WICColor colors[256];
|
WICColor colors[256];
|
||||||
ColorMapObject *cm;
|
ColorMapObject *cm;
|
||||||
int i, trans;
|
int i, trans, count;
|
||||||
ExtensionBlock *eb;
|
ExtensionBlock *eb;
|
||||||
|
|
||||||
TRACE("(%p,%p)\n", iface, palette);
|
TRACE("(%p,%p)\n", iface, palette);
|
||||||
|
|
||||||
cm = This->gif->SColorMap;
|
cm = This->gif->SColorMap;
|
||||||
if (!cm) return WINCODEC_ERR_FRAMEMISSING;
|
if (cm)
|
||||||
|
|
||||||
if (cm->ColorCount > 256)
|
|
||||||
{
|
{
|
||||||
ERR("GIF contains invalid number of colors: %d\n", cm->ColorCount);
|
if (cm->ColorCount > 256)
|
||||||
return E_FAIL;
|
{
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
for (i = 0; i < cm->ColorCount; i++)
|
|
||||||
{
|
{
|
||||||
colors[i] = 0xff000000 | /* alpha */
|
colors[0] = 0xff000000;
|
||||||
cm->Colors[i].Red << 16 |
|
colors[1] = 0xffffffff;
|
||||||
cm->Colors[i].Green << 8 |
|
|
||||||
cm->Colors[i].Blue;
|
for (i = 2; i < 256; i++)
|
||||||
|
colors[i] = 0xff000000;
|
||||||
|
|
||||||
|
count = 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* look for the transparent color extension */
|
/* 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,
|
static HRESULT WINAPI GifDecoder_GetMetadataQueryReader(IWICBitmapDecoder *iface,
|
||||||
|
|
|
@ -284,7 +284,6 @@ static void test_local_gif_palette(void)
|
||||||
|
|
||||||
/* global palette */
|
/* global palette */
|
||||||
hr = IWICBitmapDecoder_CopyPalette(decoder, palette);
|
hr = IWICBitmapDecoder_CopyPalette(decoder, palette);
|
||||||
todo_wine
|
|
||||||
ok(hr == S_OK || broken(hr == WINCODEC_ERR_FRAMEMISSING), "CopyPalette %#x\n", hr);
|
ok(hr == S_OK || broken(hr == WINCODEC_ERR_FRAMEMISSING), "CopyPalette %#x\n", hr);
|
||||||
if (hr == S_OK)
|
if (hr == S_OK)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue