1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Fixed bitmap orientation for Create*Bitmap functions

Fixes upside-down save game screenshots in Siege of Avalon (issue #42)
This commit is contained in:
narzoul 2019-07-29 23:56:40 +02:00
parent b6f6f2acf0
commit f9f4b6fb00
3 changed files with 6 additions and 6 deletions

View File

@ -168,7 +168,7 @@ namespace
LOG_FUNC("CreateDIBitmap", hdc, lpbmih, fdwInit, lpbInit, lpbmi, fuUsage); LOG_FUNC("CreateDIBitmap", hdc, lpbmih, fdwInit, lpbInit, lpbmi, fuUsage);
if (lpbmih && (!(fdwInit & CBM_INIT) || lpbInit && lpbmi)) if (lpbmih && (!(fdwInit & CBM_INIT) || lpbInit && lpbmi))
{ {
HBITMAP bitmap = Gdi::VirtualScreen::createOffScreenDib(lpbmih->biWidth, std::abs(lpbmih->biHeight)); HBITMAP bitmap = Gdi::VirtualScreen::createOffScreenDib(lpbmih->biWidth, lpbmih->biHeight);
if (bitmap && (fdwInit & CBM_INIT)) if (bitmap && (fdwInit & CBM_INIT))
{ {
SetDIBits(hdc, bitmap, 0, std::abs(lpbmih->biHeight), lpbInit, lpbmi, fuUsage); SetDIBits(hdc, bitmap, 0, std::abs(lpbmih->biHeight), lpbInit, lpbmi, fuUsage);

View File

@ -36,7 +36,7 @@ namespace
return TRUE; return TRUE;
} }
HBITMAP createDibSection(DWORD width, DWORD height, HANDLE section) HBITMAP createDibSection(LONG width, LONG height, HANDLE section)
{ {
struct BITMAPINFO256 : public BITMAPINFO struct BITMAPINFO256 : public BITMAPINFO
{ {
@ -46,7 +46,7 @@ namespace
BITMAPINFO256 bmi = {}; BITMAPINFO256 bmi = {};
bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
bmi.bmiHeader.biWidth = width; bmi.bmiHeader.biWidth = width;
bmi.bmiHeader.biHeight = -static_cast<LONG>(height); bmi.bmiHeader.biHeight = height;
bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = static_cast<WORD>(g_bpp); bmi.bmiHeader.biBitCount = static_cast<WORD>(g_bpp);
bmi.bmiHeader.biCompression = 8 == g_bpp ? BI_RGB : BI_BITFIELDS; bmi.bmiHeader.biCompression = 8 == g_bpp ? BI_RGB : BI_BITFIELDS;
@ -107,10 +107,10 @@ namespace Gdi
{ {
return nullptr; return nullptr;
} }
return createDibSection(g_width, g_height, g_surfaceFileMapping); return createDibSection(g_width, -g_height, g_surfaceFileMapping);
} }
HBITMAP createOffScreenDib(DWORD width, DWORD height) HBITMAP createOffScreenDib(LONG width, LONG height)
{ {
Compat::ScopedCriticalSection lock(g_cs); Compat::ScopedCriticalSection lock(g_cs);
return createDibSection(width, height, nullptr); return createDibSection(width, height, nullptr);

View File

@ -14,7 +14,7 @@ namespace Gdi
{ {
HDC createDc(); HDC createDc();
HBITMAP createDib(); HBITMAP createDib();
HBITMAP createOffScreenDib(DWORD width, DWORD height); HBITMAP createOffScreenDib(LONG width, LONG height);
CompatPtr<IDirectDrawSurface7> createSurface(const RECT& rect); CompatPtr<IDirectDrawSurface7> createSurface(const RECT& rect);
void deleteDc(HDC dc); void deleteDc(HDC dc);