[PATCH] windowscodecs: Correctly handle 8bpp custom conversions

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Mon Feb 21 01:21:49 CST 2022


Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 dlls/windowscodecs/converter.c       |  2 +-
 dlls/windowscodecs/tests/converter.c | 34 ++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/dlls/windowscodecs/converter.c b/dlls/windowscodecs/converter.c
index c321627885b..b27d478f717 100644
--- a/dlls/windowscodecs/converter.c
+++ b/dlls/windowscodecs/converter.c
@@ -1703,7 +1703,7 @@ static HRESULT WINAPI FormatConverter_Initialize(IWICFormatConverter *iface,
         case WICBitmapPaletteTypeCustom:
             IWICPalette_Release(palette);
             palette = NULL;
-            if (bpp <= 8) return E_INVALIDARG;
+            if (bpp < 8) return E_INVALIDARG;
             break;
 
         case WICBitmapPaletteTypeMedianCut:
diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c
index df6528afa71..456b3502c77 100644
--- a/dlls/windowscodecs/tests/converter.c
+++ b/dlls/windowscodecs/tests/converter.c
@@ -637,6 +637,39 @@ static void test_default_converter(void)
     DeleteTestBitmap(src_obj);
 }
 
+static void test_converter_8bppGray(void)
+{
+    BitmapTestSrc *src_obj;
+    IWICFormatConverter *converter;
+    BOOL can_convert = TRUE;
+    HRESULT hr;
+
+    CreateTestBitmap(&testdata_32bppBGRA, &src_obj);
+
+    hr = CoCreateInstance(&CLSID_WICDefaultFormatConverter, NULL, CLSCTX_INPROC_SERVER,
+        &IID_IWICFormatConverter, (void**)&converter);
+    ok(SUCCEEDED(hr), "CoCreateInstance failed, hr=%x\n", hr);
+    if (SUCCEEDED(hr))
+    {
+        hr = IWICFormatConverter_CanConvert(converter, &GUID_WICPixelFormat32bppBGRA,
+            &GUID_WICPixelFormat8bppGray, &can_convert);
+        ok(SUCCEEDED(hr), "CanConvert returned %x\n", hr);
+        ok(can_convert, "expected TRUE, got %i\n", can_convert);
+
+        hr = IWICFormatConverter_Initialize(converter, &src_obj->IWICBitmapSource_iface,
+            &GUID_WICPixelFormat8bppGray, WICBitmapDitherTypeNone, NULL, 0.0,
+            WICBitmapPaletteTypeCustom);
+        ok(SUCCEEDED(hr), "Initialize returned %x\n", hr);
+
+        if (SUCCEEDED(hr))
+            compare_bitmap_data(&testdata_32bppBGRA, &testdata_8bppGray, (IWICBitmapSource*)converter, "8bppGray converter");
+
+        IWICFormatConverter_Release(converter);
+    }
+
+    DeleteTestBitmap(src_obj);
+}
+
 typedef struct property_opt_test_data
 {
     LPCOLESTR name;
@@ -1922,6 +1955,7 @@ START_TEST(converter)
 
     test_invalid_conversion();
     test_default_converter();
+    test_converter_8bppGray();
     test_converter_8bppIndexed();
 
     test_encoder(&testdata_8bppIndexed, &CLSID_WICGifEncoder,
-- 
2.34.1




More information about the wine-devel mailing list