diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-06-03 18:32:44 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-06-04 14:57:11 -0500 |
| commit | c661b773f8ae37bbdea6da25a57d3626e7113920 (patch) | |
| tree | 3d4dd37651f3e6e64a614ede99b55037faf79dd7 /src/libs/dutil/WixToolset.DUtil/gdiputil.cpp | |
| parent | 089295bf2eb1274da2326e5864afc905070a2832 (diff) | |
| download | wix-c661b773f8ae37bbdea6da25a57d3626e7113920.tar.gz wix-c661b773f8ae37bbdea6da25a57d3626e7113920.tar.bz2 wix-c661b773f8ae37bbdea6da25a57d3626e7113920.zip | |
In thmutil when drawing images, use GDI+ and the actual dimensions.
Partial fix for #6155
Fixes #4106
Diffstat (limited to 'src/libs/dutil/WixToolset.DUtil/gdiputil.cpp')
| -rw-r--r-- | src/libs/dutil/WixToolset.DUtil/gdiputil.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
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( | |||
| 56 | 56 | ||
| 57 | /******************************************************************** | 57 | /******************************************************************** |
| 58 | GdipBitmapFromResource - read a GDI+ image out of a resource stream | 58 | GdipBitmapFromResource - read a GDI+ image out of a resource stream |
| 59 | of type RT_RCDATA. | ||
| 59 | 60 | ||
| 60 | ********************************************************************/ | 61 | ********************************************************************/ |
| 61 | extern "C" HRESULT DAPI GdipBitmapFromResource( | 62 | extern "C" HRESULT DAPI GdipBitmapFromResource( |
| @@ -67,12 +68,13 @@ extern "C" HRESULT DAPI GdipBitmapFromResource( | |||
| 67 | HRESULT hr = S_OK; | 68 | HRESULT hr = S_OK; |
| 68 | LPVOID pvData = NULL; | 69 | LPVOID pvData = NULL; |
| 69 | DWORD cbData = 0; | 70 | DWORD cbData = 0; |
| 70 | HGLOBAL hGlobal = NULL;; | 71 | HGLOBAL hGlobal = NULL; |
| 71 | LPVOID pv = NULL; | 72 | LPVOID pv = NULL; |
| 72 | IStream *pStream = NULL; | 73 | IStream *pStream = NULL; |
| 73 | Bitmap *pBitmap = NULL; | 74 | Bitmap *pBitmap = NULL; |
| 74 | Status gs = Ok; | 75 | Status gs = Ok; |
| 75 | 76 | ||
| 77 | // Use ResReadData (RT_RCDATA) instead of Bitmap::FromResource (RT_BITMAP) to support all file formats that GDI+ supports. | ||
| 76 | hr = ResReadData(hinst, szId, &pvData, &cbData); | 78 | hr = ResReadData(hinst, szId, &pvData, &cbData); |
| 77 | GdipExitOnFailure(hr, "Failed to load GDI+ bitmap from resource."); | 79 | GdipExitOnFailure(hr, "Failed to load GDI+ bitmap from resource."); |
| 78 | 80 | ||
| @@ -159,6 +161,27 @@ LExit: | |||
| 159 | } | 161 | } |
| 160 | 162 | ||
| 161 | 163 | ||
| 164 | /******************************************************************** | ||
| 165 | GdipBitmapToGdiBitmap - convert Gdiplus::Bitmap to HBITMAP. | ||
| 166 | |||
| 167 | ********************************************************************/ | ||
| 168 | extern "C" HRESULT DAPI GdipBitmapToGdiBitmap( | ||
| 169 | __in Gdiplus::Bitmap* pBitmap, | ||
| 170 | __out HBITMAP* phBitmap | ||
| 171 | ) | ||
| 172 | { | ||
| 173 | HRESULT hr = S_OK; | ||
| 174 | Status gs = Ok; | ||
| 175 | Color black; | ||
| 176 | |||
| 177 | gs = pBitmap->GetHBITMAP(black, phBitmap); | ||
| 178 | GdipExitOnGdipFailure(gs, hr, "Failed to convert GDI+ bitmap into HBITMAP."); | ||
| 179 | |||
| 180 | LExit: | ||
| 181 | return hr; | ||
| 182 | } | ||
| 183 | |||
| 184 | |||
| 162 | HRESULT DAPI GdipHresultFromStatus( | 185 | HRESULT DAPI GdipHresultFromStatus( |
| 163 | __in Gdiplus::Status gs | 186 | __in Gdiplus::Status gs |
| 164 | ) | 187 | ) |
