Module: wine Branch: master Commit: 70a3e86997ad1c1419cd02b9b49db7953cf5c4e4 URL: https://source.winehq.org/git/wine.git/?a=commit;h=70a3e86997ad1c1419cd02b9b... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Thu Nov 8 15:20:55 2018 +0300 wincodecs: Add support for WICBitmapNoCache in CreateBitmapFromSource() for bitmap as a source. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Vincent Povirk <vincent(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/windowscodecs/imgfactory.c | 10 ++++++++++ dlls/windowscodecs/tests/bitmap.c | 1 - 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dlls/windowscodecs/imgfactory.c b/dlls/windowscodecs/imgfactory.c index 78919a7..b564efc 100644 --- a/dlls/windowscodecs/imgfactory.c +++ b/dlls/windowscodecs/imgfactory.c @@ -19,6 +19,7 @@ #include "config.h" +#include <assert.h> #include <stdarg.h> #define COBJMACROS @@ -501,9 +502,18 @@ static HRESULT create_bitmap_from_source_rect(IWICBitmapSource *piBitmapSource, IWICPixelFormatInfo2 *formatinfo; WICPixelFormatNumericRepresentation format_type; + assert(!rect || (rect && option == WICBitmapCacheOnLoad)); + if (!piBitmapSource || !ppIBitmap) return E_INVALIDARG; + if (option == WICBitmapNoCache && SUCCEEDED(IWICBitmapSource_QueryInterface(piBitmapSource, + &IID_IWICBitmap, (void **)&result))) + { + *ppIBitmap = result; + return S_OK; + } + hr = IWICBitmapSource_GetSize(piBitmapSource, &width, &height); if (SUCCEEDED(hr) && rect) diff --git a/dlls/windowscodecs/tests/bitmap.c b/dlls/windowscodecs/tests/bitmap.c index 61e985a..5c225d2 100644 --- a/dlls/windowscodecs/tests/bitmap.c +++ b/dlls/windowscodecs/tests/bitmap.c @@ -456,7 +456,6 @@ static void test_createbitmapfromsource(void) hr = IWICImagingFactory_CreateBitmapFromSource(factory, (IWICBitmapSource *)bitmap, WICBitmapNoCache, &bitmap2); ok(hr == S_OK, "IWICImagingFactory_CreateBitmapFromSource failed hr=%x\n", hr); -todo_wine ok(bitmap2 == bitmap, "Unexpected bitmap instance.\n"); IWICBitmap_Release(bitmap2);