From c661b773f8ae37bbdea6da25a57d3626e7113920 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Thu, 3 Jun 2021 18:32:44 -0500 Subject: In thmutil when drawing images, use GDI+ and the actual dimensions. Partial fix for #6155 Fixes #4106 --- src/libs/dutil/WixToolset.DUtil/gdiputil.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src/libs/dutil/WixToolset.DUtil/gdiputil.cpp') diff --git a/src/libs/dutil/WixToolset.DUtil/gdiputil.cpp b/src/libs/dutil/WixToolset.DUtil/gdiputil.cpp index b5a0087c..c8b6814f 100644 --- a/src/libs/dutil/WixToolset.DUtil/gdiputil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/gdiputil.cpp @@ -56,6 +56,7 @@ extern "C" void DAPI GdipUninitialize( /******************************************************************** GdipBitmapFromResource - read a GDI+ image out of a resource stream + of type RT_RCDATA. ********************************************************************/ extern "C" HRESULT DAPI GdipBitmapFromResource( @@ -67,12 +68,13 @@ extern "C" HRESULT DAPI GdipBitmapFromResource( HRESULT hr = S_OK; LPVOID pvData = NULL; DWORD cbData = 0; - HGLOBAL hGlobal = NULL;; + HGLOBAL hGlobal = NULL; LPVOID pv = NULL; IStream *pStream = NULL; Bitmap *pBitmap = NULL; Status gs = Ok; + // Use ResReadData (RT_RCDATA) instead of Bitmap::FromResource (RT_BITMAP) to support all file formats that GDI+ supports. hr = ResReadData(hinst, szId, &pvData, &cbData); GdipExitOnFailure(hr, "Failed to load GDI+ bitmap from resource."); @@ -159,6 +161,27 @@ LExit: } +/******************************************************************** + GdipBitmapToGdiBitmap - convert Gdiplus::Bitmap to HBITMAP. + +********************************************************************/ +extern "C" HRESULT DAPI GdipBitmapToGdiBitmap( + __in Gdiplus::Bitmap* pBitmap, + __out HBITMAP* phBitmap + ) +{ + HRESULT hr = S_OK; + Status gs = Ok; + Color black; + + gs = pBitmap->GetHBITMAP(black, phBitmap); + GdipExitOnGdipFailure(gs, hr, "Failed to convert GDI+ bitmap into HBITMAP."); + +LExit: + return hr; +} + + HRESULT DAPI GdipHresultFromStatus( __in Gdiplus::Status gs ) -- cgit v1.2.3-55-g6feb