windowscodecs: Add support for generating WICBitmapPaletteTypeFixedBW palette. Resend.

This commit is contained in:
Dmitry Timoshkov 2012-07-12 16:06:29 +09:00 committed by Alexandre Julliard
parent 4b0f27f664
commit ca9d128eca
2 changed files with 104 additions and 3 deletions

View File

@ -99,10 +99,37 @@ static ULONG WINAPI PaletteImpl_Release(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);
return E_NOTIMPL;
PaletteImpl *This = impl_from_IWICPalette(iface);
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,

View File

@ -148,11 +148,85 @@ static void test_custom_palette(void)
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)
{
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
test_custom_palette();
test_predefined_palette();
CoUninitialize();
}