Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/windowscodecs/tests/converter.c | 158 +++++++++++++++++++++++++++
1 file changed, 158 insertions(+)
diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c
index 481e5636b9..704ce20dcd 100644
--- a/dlls/windowscodecs/tests/converter.c
+++ b/dlls/windowscodecs/tests/converter.c
@@ -1571,6 +1571,163 @@ static const struct setting png_interlace_settings[] = {
{NULL}
};
+static void test_converter_8bppIndexed(void)
+{
+ HRESULT hr;
+ BitmapTestSrc *src_obj;
+ IWICFormatConverter *converter;
+ IWICPalette *palette;
+ UINT count, i;
+ BYTE buf[32 * 2 * 3]; /* enough to hold 32x2 24bppBGR data */
+
+ CreateTestBitmap(&testdata_24bppBGR, &src_obj);
+
+ hr = IWICImagingFactory_CreatePalette(factory, &palette);
+ ok(hr == S_OK, "CreatePalette error %#x\n", hr);
+ count = 0xdeadbeef;
+ hr = IWICPalette_GetColorCount(palette, &count);
+ ok(hr == S_OK, "GetColorCount error %#x\n", hr);
+ ok(count == 0, "expected 0, got %u\n", count);
+
+ /* NULL palette + Custom type */
+ hr = IWICImagingFactory_CreateFormatConverter(factory, &converter);
+ ok(hr == S_OK, "CreateFormatConverter error %#x\n", hr);
+ hr = IWICFormatConverter_Initialize(converter, &src_obj->IWICBitmapSource_iface,
+ &GUID_WICPixelFormat24bppBGR, WICBitmapDitherTypeNone,
+ NULL, 0.0, WICBitmapPaletteTypeCustom);
+ ok(hr == S_OK, "Initialize error %#x\n", hr);
+ hr = IWICFormatConverter_CopyPalette(converter, palette);
+ ok(hr == 0xdeadbeef, "unexpected error %#x\n", hr);
+ hr = IWICFormatConverter_CopyPixels(converter, NULL, 32 * 3, sizeof(buf), buf);
+ ok(hr == S_OK, "CopyPixels error %#x\n", hr);
+ IWICFormatConverter_Release(converter);
+
+ /* NULL palette + Custom type */
+ hr = IWICImagingFactory_CreateFormatConverter(factory, &converter);
+ ok(hr == S_OK, "CreateFormatConverter error %#x\n", hr);
+ hr = IWICFormatConverter_Initialize(converter, &src_obj->IWICBitmapSource_iface,
+ &GUID_WICPixelFormat8bppIndexed, WICBitmapDitherTypeNone,
+ NULL, 0.0, WICBitmapPaletteTypeCustom);
+ ok(hr == E_INVALIDARG, "unexpected error %#x\n", hr);
+ hr = IWICFormatConverter_CopyPalette(converter, palette);
+ ok(hr == WINCODEC_ERR_WRONGSTATE, "unexpected error %#x\n", hr);
+ hr = IWICFormatConverter_CopyPixels(converter, NULL, 32, sizeof(buf), buf);
+ ok(hr == WINCODEC_ERR_WRONGSTATE, "unexpected error %#x\n", hr);
+ IWICFormatConverter_Release(converter);
+
+ /* empty palette + Custom type */
+ hr = IWICImagingFactory_CreateFormatConverter(factory, &converter);
+ ok(hr == S_OK, "CreateFormatConverter error %#x\n", hr);
+ hr = IWICFormatConverter_Initialize(converter, &src_obj->IWICBitmapSource_iface,
+ &GUID_WICPixelFormat8bppIndexed, WICBitmapDitherTypeNone,
+ palette, 0.0, WICBitmapPaletteTypeCustom);
+ ok(hr == S_OK, "Initialize error %#x\n", hr);
+ hr = IWICFormatConverter_CopyPalette(converter, palette);
+ ok(hr == S_OK, "CopyPalette error %#x\n", hr);
+ count = 0xdeadbeef;
+ hr = IWICPalette_GetColorCount(palette, &count);
+ ok(hr == S_OK, "GetColorCount error %#x\n", hr);
+ ok(count == 0, "expected 0, got %u\n", count);
+ memset(buf, 0xaa, sizeof(buf));
+ hr = IWICFormatConverter_CopyPixels(converter, NULL, 32, sizeof(buf), buf);
+ ok(hr == S_OK, "CopyPixels error %#x\n", hr);
+ count = 0;
+ for (i = 0; i < 32 * 2; i++)
+ if (buf[i] != 0) count++;
+ ok(count == 0, "expected 0\n");
+ IWICFormatConverter_Release(converter);
+
+ /* NULL palette + Predefined type */
+ hr = IWICImagingFactory_CreateFormatConverter(factory, &converter);
+ ok(hr == S_OK, "CreateFormatConverter error %#x\n", hr);
+ hr = IWICFormatConverter_Initialize(converter, &src_obj->IWICBitmapSource_iface,
+ &GUID_WICPixelFormat8bppIndexed, WICBitmapDitherTypeNone,
+ NULL, 0.0, WICBitmapPaletteTypeFixedGray16);
+ ok(hr == S_OK, "Initialize error %#x\n", hr);
+ hr = IWICFormatConverter_CopyPalette(converter, palette);
+ ok(hr == S_OK, "CopyPalette error %#x\n", hr);
+ count = 0xdeadbeef;
+ hr = IWICPalette_GetColorCount(palette, &count);
+ ok(hr == S_OK, "GetColorCount error %#x\n", hr);
+ ok(count == 16, "expected 16, got %u\n", count);
+ hr = IWICFormatConverter_CopyPixels(converter, NULL, 32, sizeof(buf), buf);
+ ok(hr == S_OK, "CopyPixels error %#x\n", hr);
+ count = 0;
+ for (i = 0; i < 32 * 2; i++)
+ if (buf[i] != 0) count++;
+ ok(count != 0, "expected != 0\n");
+ IWICFormatConverter_Release(converter);
+
+ /* not empty palette + Predefined type */
+ hr = IWICImagingFactory_CreateFormatConverter(factory, &converter);
+ ok(hr == S_OK, "CreateFormatConverter error %#x\n", hr);
+ hr = IWICFormatConverter_Initialize(converter, &src_obj->IWICBitmapSource_iface,
+ &GUID_WICPixelFormat8bppIndexed, WICBitmapDitherTypeNone,
+ palette, 0.0, WICBitmapPaletteTypeFixedHalftone64);
+ ok(hr == S_OK, "Initialize error %#x\n", hr);
+ hr = IWICFormatConverter_CopyPalette(converter, palette);
+ ok(hr == S_OK, "CopyPalette error %#x\n", hr);
+ count = 0xdeadbeef;
+ hr = IWICPalette_GetColorCount(palette, &count);
+ ok(hr == S_OK, "GetColorCount error %#x\n", hr);
+ ok(count == 16, "expected 16, got %u\n", count);
+ hr = IWICFormatConverter_CopyPixels(converter, NULL, 32, sizeof(buf), buf);
+ ok(hr == S_OK, "CopyPixels error %#x\n", hr);
+ count = 0;
+ for (i = 0; i < 32 * 2; i++)
+ if (buf[i] != 0) count++;
+ ok(count != 0, "expected != 0\n");
+ IWICFormatConverter_Release(converter);
+
+ /* not empty palette + MedianCut type */
+ hr = IWICImagingFactory_CreateFormatConverter(factory, &converter);
+ ok(hr == S_OK, "CreateFormatConverter error %#x\n", hr);
+ hr = IWICFormatConverter_Initialize(converter, &src_obj->IWICBitmapSource_iface,
+ &GUID_WICPixelFormat8bppIndexed, WICBitmapDitherTypeNone,
+ palette, 0.0, WICBitmapPaletteTypeMedianCut);
+ ok(hr == S_OK, "Initialize error %#x\n", hr);
+ hr = IWICFormatConverter_CopyPalette(converter, palette);
+ ok(hr == S_OK, "CopyPalette error %#x\n", hr);
+ count = 0xdeadbeef;
+ hr = IWICPalette_GetColorCount(palette, &count);
+ ok(hr == S_OK, "GetColorCount error %#x\n", hr);
+ ok(count == 16, "expected 16, got %u\n", count);
+ hr = IWICFormatConverter_CopyPixels(converter, NULL, 32, sizeof(buf), buf);
+ ok(hr == S_OK, "CopyPixels error %#x\n", hr);
+ count = 0;
+ for (i = 0; i < 32 * 2; i++)
+ if (buf[i] != 0) count++;
+ ok(count != 0, "expected != 0\n");
+ IWICFormatConverter_Release(converter);
+
+ /* NULL palette + MedianCut type */
+ hr = IWICImagingFactory_CreateFormatConverter(factory, &converter);
+ ok(hr == S_OK, "CreateFormatConverter error %#x\n", hr);
+ hr = IWICFormatConverter_Initialize(converter, &src_obj->IWICBitmapSource_iface,
+ &GUID_WICPixelFormat8bppIndexed, WICBitmapDitherTypeNone,
+ NULL, 0.0, WICBitmapPaletteTypeMedianCut);
+ ok(hr == S_OK || broken(hr == E_INVALIDARG) /* XP */, "Initialize error %#x\n", hr);
+ if (hr == S_OK)
+ {
+ hr = IWICFormatConverter_CopyPalette(converter, palette);
+ ok(hr == S_OK, "CopyPalette error %#x\n", hr);
+ count = 0xdeadbeef;
+ hr = IWICPalette_GetColorCount(palette, &count);
+ ok(hr == S_OK, "GetColorCount error %#x\n", hr);
+ ok(count == 8, "expected 8, got %u\n", count);
+ hr = IWICFormatConverter_CopyPixels(converter, NULL, 32, sizeof(buf), buf);
+ ok(hr == S_OK, "CopyPixels error %#x\n", hr);
+ count = 0;
+ for (i = 0; i < 32 * 2; i++)
+ if (buf[i] != 0) count++;
+ ok(count != 0, "expected != 0\n");
+ }
+ IWICFormatConverter_Release(converter);
+
+ IWICPalette_Release(palette);
+ DeleteTestBitmap(src_obj);
+}
+
START_TEST(converter)
{
HRESULT hr;
@@ -1615,6 +1772,7 @@ START_TEST(converter)
test_invalid_conversion();
test_default_converter();
+ test_converter_8bppIndexed();
test_encoder(&testdata_BlackWhite, &CLSID_WICPngEncoder,
&testdata_BlackWhite, &CLSID_WICPngDecoder, "PNG encoder BlackWhite");
--
2.20.1