windowscodecs: Add support for generating WICBitmapPaletteTypeFixedBW palette. Resend.
This commit is contained in:
parent
4b0f27f664
commit
ca9d128eca
|
@ -99,10 +99,37 @@ static ULONG WINAPI PaletteImpl_Release(IWICPalette *iface)
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI PaletteImpl_InitializePredefined(IWICPalette *iface,
|
static HRESULT WINAPI PaletteImpl_InitializePredefined(IWICPalette *iface,
|
||||||
WICBitmapPaletteType ePaletteType, BOOL fAddTransparentColor)
|
WICBitmapPaletteType type, BOOL add_transparent)
|
||||||
{
|
{
|
||||||
FIXME("(%p,%u,%i): stub\n", iface, ePaletteType, fAddTransparentColor);
|
PaletteImpl *This = impl_from_IWICPalette(iface);
|
||||||
return E_NOTIMPL;
|
WICColor *colors;
|
||||||
|
UINT count;
|
||||||
|
|
||||||
|
TRACE("(%p,%u,%d)\n", iface, type, add_transparent);
|
||||||
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case WICBitmapPaletteTypeFixedBW:
|
||||||
|
count = 2;
|
||||||
|
colors = HeapAlloc(GetProcessHeap(), 0, count * sizeof(WICColor));
|
||||||
|
if (!colors) return E_OUTOFMEMORY;
|
||||||
|
colors[0] = 0xff000000;
|
||||||
|
colors[1] = 0xffffffff;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FIXME("(%p,%u,%d): stub\n", iface, type, add_transparent);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
EnterCriticalSection(&This->lock);
|
||||||
|
HeapFree(GetProcessHeap(), 0, This->colors);
|
||||||
|
This->colors = colors;
|
||||||
|
This->count = count;
|
||||||
|
This->type = type;
|
||||||
|
LeaveCriticalSection(&This->lock);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI PaletteImpl_InitializeCustom(IWICPalette *iface,
|
static HRESULT WINAPI PaletteImpl_InitializeCustom(IWICPalette *iface,
|
||||||
|
|
|
@ -148,11 +148,85 @@ static void test_custom_palette(void)
|
||||||
IWICImagingFactory_Release(factory);
|
IWICImagingFactory_Release(factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_predefined_palette(void)
|
||||||
|
{
|
||||||
|
static struct test_data
|
||||||
|
{
|
||||||
|
WICBitmapPaletteType type;
|
||||||
|
BOOL is_bw, is_gray;
|
||||||
|
UINT count;
|
||||||
|
WICColor color[256];
|
||||||
|
} td[] =
|
||||||
|
{
|
||||||
|
{ WICBitmapPaletteTypeFixedBW, 1, 1, 2, { 0xff000000, 0xffffffff } },
|
||||||
|
};
|
||||||
|
IWICImagingFactory *factory;
|
||||||
|
IWICPalette *palette;
|
||||||
|
HRESULT hr;
|
||||||
|
WICBitmapPaletteType type;
|
||||||
|
UINT count, i, ret;
|
||||||
|
BOOL bret;
|
||||||
|
WICColor color[256];
|
||||||
|
|
||||||
|
hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER,
|
||||||
|
&IID_IWICImagingFactory, (void **)&factory);
|
||||||
|
ok(hr == S_OK, "CoCreateInstance error %#x\n", hr);
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
|
||||||
|
{
|
||||||
|
hr = IWICImagingFactory_CreatePalette(factory, &palette);
|
||||||
|
ok(hr == S_OK, "%u: CreatePalette error %#x\n", i, hr);
|
||||||
|
|
||||||
|
hr = IWICPalette_InitializePredefined(palette, td[i].type, FALSE);
|
||||||
|
ok(hr == S_OK, "%u: InitializePredefined error %#x\n", i, hr);
|
||||||
|
|
||||||
|
bret = -1;
|
||||||
|
hr = IWICPalette_IsBlackWhite(palette, &bret);
|
||||||
|
ok(hr == S_OK, "%u: IsBlackWhite error %#x\n", i, hr);
|
||||||
|
ok(bret == td[i].is_bw ||
|
||||||
|
broken(td[i].type == WICBitmapPaletteTypeFixedBW && bret != td[i].is_bw), /* XP */
|
||||||
|
"%u: expected %d, got %d\n",i, td[i].is_bw, bret);
|
||||||
|
|
||||||
|
bret = -1;
|
||||||
|
hr = IWICPalette_IsGrayscale(palette, &bret);
|
||||||
|
ok(hr == S_OK, "%u: IsGrayscale error %#x\n", i, hr);
|
||||||
|
ok(bret == td[i].is_gray, "%u: expected %d, got %d\n", i, td[i].is_gray, bret);
|
||||||
|
|
||||||
|
type = -1;
|
||||||
|
hr = IWICPalette_GetType(palette, &type);
|
||||||
|
ok(hr == S_OK, "%u: GetType error %#x\n", i, hr);
|
||||||
|
ok(type == td[i].type, "%u: expected %#x, got %#x\n", i, td[i].type, type);
|
||||||
|
|
||||||
|
count = 0xdeadbeef;
|
||||||
|
hr = IWICPalette_GetColorCount(palette, &count);
|
||||||
|
ok(hr == S_OK, "%u: GetColorCount error %#x\n", i, hr);
|
||||||
|
ok(count == td[i].count, "%u: expected %u, got %u\n", i, td[i].count, count);
|
||||||
|
|
||||||
|
hr = IWICPalette_GetColors(palette, count, color, &ret);
|
||||||
|
ok(hr == S_OK, "%u: GetColors error %#x\n", i, hr);
|
||||||
|
ok(ret == count, "%u: expected %u, got %u\n", i, count, ret);
|
||||||
|
if (ret == td[i].count)
|
||||||
|
{
|
||||||
|
UINT j;
|
||||||
|
for (j = 0; j < count; j++)
|
||||||
|
{
|
||||||
|
ok(color[j] == td[i].color[j], "%u:[%u]: expected %#x, got %#x\n",
|
||||||
|
i, j, td[i].color[j], color[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
IWICPalette_Release(palette);
|
||||||
|
}
|
||||||
|
|
||||||
|
IWICImagingFactory_Release(factory);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(palette)
|
START_TEST(palette)
|
||||||
{
|
{
|
||||||
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
||||||
|
|
||||||
test_custom_palette();
|
test_custom_palette();
|
||||||
|
test_predefined_palette();
|
||||||
|
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue