windowscodecs: Use alpha options in CreateBitmapFromHBITMAP.
Vincent Povirk
madewokherd at gmail.com
Tue Nov 19 13:10:02 CST 2013
-------------- next part --------------
From 5b4a72cc7f3c2850fb7f752eeedbfb7f46539a64 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Tue, 19 Nov 2013 13:03:53 -0600
Subject: [PATCH] windowscodecs: Use alpha options in CreateBitmapFromHBITMAP.
---
dlls/windowscodecs/imgfactory.c | 15 ++++++++++++++-
dlls/windowscodecs/tests/bitmap.c | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/dlls/windowscodecs/imgfactory.c b/dlls/windowscodecs/imgfactory.c
index bb4cf67..d31baa2 100644
--- a/dlls/windowscodecs/imgfactory.c
+++ b/dlls/windowscodecs/imgfactory.c
@@ -687,7 +687,20 @@ static HRESULT WINAPI ComponentFactory_CreateBitmapFromHBITMAP(IWICComponentFact
format = GUID_WICPixelFormat24bppBGR;
break;
case 32:
- format = GUID_WICPixelFormat32bppBGR;
+ switch (option)
+ {
+ case WICBitmapUseAlpha:
+ format = GUID_WICPixelFormat32bppBGRA;
+ break;
+ case WICBitmapUsePremultipliedAlpha:
+ format = GUID_WICPixelFormat32bppPBGRA;
+ break;
+ case WICBitmapIgnoreAlpha:
+ format = GUID_WICPixelFormat32bppBGR;
+ break;
+ default:
+ return E_INVALIDARG;
+ }
break;
case 48:
format = GUID_WICPixelFormat48bppRGB;
diff --git a/dlls/windowscodecs/tests/bitmap.c b/dlls/windowscodecs/tests/bitmap.c
index 8de990a..14726f1 100644
--- a/dlls/windowscodecs/tests/bitmap.c
+++ b/dlls/windowscodecs/tests/bitmap.c
@@ -846,6 +846,41 @@ todo_wine
IWICBitmap_Release(bitmap);
DeleteObject(hbmp);
DeleteObject(hpal);
+
+ /* 32bpp alpha */
+ hbmp = create_dib(2, 2, 32, NULL, NULL);
+ hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, NULL, WICBitmapUseAlpha, &bitmap);
+ ok(hr == S_OK, "CreateBitmapFromHBITMAP error %#x\n", hr);
+
+ hr = IWICBitmap_GetPixelFormat(bitmap, &format);
+ ok(hr == S_OK, "GetPixelFormat error %#x\n", hr);
+ ok(IsEqualGUID(&format, &GUID_WICPixelFormat32bppBGRA),
+ "unexpected pixel format %s\n", debugstr_guid(&format));
+
+ IWICBitmap_Release(bitmap);
+
+ /* 32bpp pre-multiplied alpha */
+ hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, NULL, WICBitmapUsePremultipliedAlpha, &bitmap);
+ ok(hr == S_OK, "CreateBitmapFromHBITMAP error %#x\n", hr);
+
+ hr = IWICBitmap_GetPixelFormat(bitmap, &format);
+ ok(hr == S_OK, "GetPixelFormat error %#x\n", hr);
+ ok(IsEqualGUID(&format, &GUID_WICPixelFormat32bppPBGRA),
+ "unexpected pixel format %s\n", debugstr_guid(&format));
+
+ IWICBitmap_Release(bitmap);
+
+ /* 32bpp no alpha */
+ hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, NULL, WICBitmapIgnoreAlpha, &bitmap);
+ ok(hr == S_OK, "CreateBitmapFromHBITMAP error %#x\n", hr);
+
+ hr = IWICBitmap_GetPixelFormat(bitmap, &format);
+ ok(hr == S_OK, "GetPixelFormat error %#x\n", hr);
+ ok(IsEqualGUID(&format, &GUID_WICPixelFormat32bppBGR),
+ "unexpected pixel format %s\n", debugstr_guid(&format));
+
+ IWICBitmap_Release(bitmap);
+ DeleteObject(hbmp);
}
static void test_clipper(void)
--
1.8.1.2
More information about the wine-patches
mailing list