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;
}
/***********************************************************************