diff --git a/win32ss/gdi/gdi32/objects/bitmap.c b/win32ss/gdi/gdi32/objects/bitmap.c index 108d69dca80..332aacb31ec 100644 --- a/win32ss/gdi/gdi32/objects/bitmap.c +++ b/win32ss/gdi/gdi32/objects/bitmap.c @@ -982,6 +982,17 @@ SetDIBitsToDevice( } } + if (YDest >= 0) + { + ScanLines = min(abs(Height), ScanLines); + if (YSrc > 0) + { + ScanLines += YSrc; + if (Height + YDest + 1 < ScanLines) + YSrc = 0; + } + } + /* if ( !pDc_Attr || // DC is Public ColorUse == DIB_PAL_COLORS || diff --git a/win32ss/gdi/ntgdi/dibobj.c b/win32ss/gdi/ntgdi/dibobj.c index fd489f4157b..2e8acd302a4 100644 --- a/win32ss/gdi/ntgdi/dibobj.c +++ b/win32ss/gdi/ntgdi/dibobj.c @@ -528,16 +528,7 @@ NtGdiSetDIBitsToDeviceInternal( bmi->bmiHeader.biBitCount, XSrc, YSrc, XDest, YDest); - if (YDest >= 0) - { - ScanLines = min(abs(Height), ScanLines); - if (YSrc > 0) - { - ScanLines += YSrc; - YSrc = 0; - } - } - else + if (YDest < 0) { ScanLines = min(ScanLines, abs(bmi->bmiHeader.biHeight) - StartScan); }