From 00f50dd922c55a0820b3e5667307883152c822df Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sat, 2 Sep 2006 23:58:53 +0000 Subject: [PATCH] Fixed some more wine test for NtGdiGetDIBits FIxed so we can now create BITMAPCOREHEADER bitmap (Bugs in NtGdiGetDIBits did stop create of it) svn path=/trunk/; revision=23892 --- .../subsystems/win32/win32k/objects/dibobj.c | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 24ecb1fe85b..00d211811c3 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -401,10 +401,14 @@ NtGdiGetDIBits(HDC hDC, { BITMAPCOREHEADER* coreheader = (BITMAPCOREHEADER*) Info; coreheader->bcWidth =BitmapObj->SurfObj.sizlBitmap.cx; - coreheader->bcHeight = BitmapObj->SurfObj.sizlBitmap.cy; coreheader->bcPlanes = 1; coreheader->bcBitCount = BitsPerFormat(BitmapObj->SurfObj.iBitmapFormat); - Result = BitmapObj->SurfObj.sizlBitmap.cy; + + coreheader->bcHeight = BitmapObj->SurfObj.sizlBitmap.cy; + if (BitmapObj->SurfObj.lDelta > 0) + coreheader->bcHeight = -coreheader->bcHeight; + + Result = BitmapObj->SurfObj.sizlBitmap.cy; } if (Info->bmiHeader.biSize == sizeof(BITMAPINFOHEADER)) @@ -457,12 +461,28 @@ NtGdiGetDIBits(HDC hDC, ScanLines = min(ScanLines, BitmapObj->SurfObj.sizlBitmap.cy - StartScan); DestSize.cx = BitmapObj->SurfObj.sizlBitmap.cx; DestSize.cy = ScanLines; - DestBitmap = EngCreateBitmap( - DestSize, DIB_GetDIBWidthBytes(DestSize.cx, - Info->bmiHeader.biBitCount), - BitmapFormat(Info->bmiHeader.biBitCount, Info->bmiHeader.biCompression), - 0 < Info->bmiHeader.biHeight ? 0 : BMF_TOPDOWN, - Bits); + + DestBitmap = NULL; + if (Info->bmiHeader.biSize == sizeof(BITMAPINFOHEADER)) + { + DestBitmap = EngCreateBitmap( DestSize, + DIB_GetDIBWidthBytes(DestSize.cx, Info->bmiHeader.biBitCount), + BitmapFormat(Info->bmiHeader.biBitCount, Info->bmiHeader.biCompression), + 0 < Info->bmiHeader.biHeight ? 0 : BMF_TOPDOWN, + Bits); + } + + if (Info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER)) + { + BITMAPCOREHEADER* coreheader = (BITMAPCOREHEADER*) Info; + + DestBitmap = EngCreateBitmap( DestSize, + DIB_GetDIBWidthBytes(DestSize.cx, coreheader->bcBitCount), + BitmapFormat(coreheader->bcBitCount, BI_RGB), + 0 < coreheader->bcHeight ? 0 : BMF_TOPDOWN, + Bits); + } + if(DestBitmap == NULL) { @@ -504,7 +524,7 @@ NtGdiGetDIBits(HDC hDC, } if (Usage == DIB_PAL_COLORS) { - DbgPrint("GetDIBits with DIB_PAL_COLORS isn't implemented yet."); + DPRINT1("GetDIBits with DIB_PAL_COLORS isn't implemented yet."); } }