Module: wine Branch: master Commit: 8dafdd0a565385495be6c8d3c463d84d90a6f153 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8dafdd0a565385495be6c8d3c4...
Author: Vincent Povirk vincent@codeweavers.com Date: Tue Nov 19 13:03:53 2013 -0600
windowscodecs: Use alpha options in CreateBitmapFromHBITMAP.
---
dlls/windowscodecs/imgfactory.c | 15 ++++++++++++++- dlls/windowscodecs/tests/bitmap.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletions(-)
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)