Author: greatlrd
Date: Sat May 31 06:01:51 2008
New Revision: 33782
URL: http://svn.reactos.org/svn/reactos?rev=33782&view=rev
Log:
Fixed bug in DIB_GetDIBWidthBytes
accdoing OSR it is number of bytes to next scanline in the bitmap, wine version did align it, that why wrong number of bytes was reported also fixed overflow bug in the math, and make sure if some part of win32k send in negtive width, it will not calc it wrong, Remove one hack in win32k, thx of this, Thx fireball that suggest this functions mabey was wrong
Modified:
trunk/reactos/subsystems/win32/win32k/objects/dibobj.c
Modified: trunk/reactos/subsystems/win32/win32k/objects/dibobj.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/dibobj.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/dibobj.c [iso-8859-1] Sat May 31 06:01:51 2008
@@ -665,7 +665,9 @@
}
else
{
+
ScanLines = min(ScanLines, BitmapObj->SurfObj.sizlBitmap.cy - StartScan);
+
DestSize.cx = BitmapObj->SurfObj.sizlBitmap.cx;
DestSize.cy = ScanLines;
@@ -686,9 +688,9 @@
if (Info->bmiHeader.biSize == sizeof(BITMAPINFOHEADER))
{
+
hDestBitmap = EngCreateBitmap(DestSize,
- /* DIB_GetDIBWidthBytes(DestSize.cx, Info->bmiHeader.biBitCount), */
- DestSize.cx * (Info->bmiHeader.biBitCount >> 3), /* HACK */
+ DIB_GetDIBWidthBytes(DestSize.cx, Info->bmiHeader.biBitCount),
BitmapFormat(Info->bmiHeader.biBitCount, Info->bmiHeader.biCompression),
0 < Info->bmiHeader.biHeight ? 0 : BMF_TOPDOWN,
Bits);
@@ -1218,7 +1220,12 @@
*/
INT FASTCALL DIB_GetDIBWidthBytes (INT width, INT depth)
{
- return ((width * depth + 31) & ~31) >> 3;
+ /* http://www.osronline.com/DDKx/graphics/gdifncs_9pgn.htm say it must be exacly
+ * number of byte to next scanline in the bitmap
+ */
+ UINT bytes = ((UINT)(abs(width)) * (UINT)depth) >> 3;
+ // FIXME : this is wrong return (width * depth + 31) & ~31) >> 3;
+ return (INT)bytes;
}
/***********************************************************************