Author: jimtabor Date: Sun Nov 30 07:17:19 2008 New Revision: 37766
URL: http://svn.reactos.org/svn/reactos?rev=37766&view=rev Log: - Sync in rev 37720: Magnus Olsen, add GdiGetBitmapBitsSize is a new api from windows xp sp3, the code was tested in vs2003.
Modified: trunk/reactos/dll/win32/gdi32/objects/bitmap.c
Modified: trunk/reactos/dll/win32/gdi32/objects/bitmap.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/objects/bit... ============================================================================== --- trunk/reactos/dll/win32/gdi32/objects/bitmap.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdi32/objects/bitmap.c [iso-8859-1] Sun Nov 30 07:17:19 2008 @@ -123,6 +123,48 @@ } DPRINT("(%ld): wrong size for header\n", header->biSize ); return -1; +} + +/* + * @implemented + */ +int +WINAPI +GdiGetBitmapBitsSize(BITMAPINFO *lpbmi) +{ + int retSize; + + if (lpbmi->bmiHeader.biSize == FIELD_OFFSET(BITMAPINFOHEADER, biPlanes)) + { + /* Calc the bits Size and align it*/ + retSize = HIWORD(lpbmi->bmiHeader.biWidth) * ((LOWORD(lpbmi->bmiHeader.biWidth) * + LOWORD(lpbmi->bmiHeader.biHeight) * HIWORD(lpbmi->bmiHeader.biHeight) + 31) + & -32) / 8; + } + else + { + if ( (lpbmi->bmiHeader.biCompression == BI_BITFIELDS) || + (lpbmi->bmiHeader.biCompression == BI_RGB)) + { + if (lpbmi->bmiHeader.biHeight >=0 ) + { + /* Calc the bits Size and align it*/ + retSize = lpbmi->bmiHeader.biHeight * ((lpbmi->bmiHeader.biWidth * + lpbmi->bmiHeader.biPlanes * lpbmi->bmiHeader.biBitCount + 31) & -32) / 8; + } + else + { + /* Make height postiive if it negitve then calc the bits Size and align it*/ + retSize = (-lpbmi->bmiHeader.biHeight) * ((lpbmi->bmiHeader.biWidth * + lpbmi->bmiHeader.biPlanes * lpbmi->bmiHeader.biBitCount + 31) & -32) / 8; + } + } + else + { + retSize = lpbmi->bmiHeader.biSizeImage; + } + } + return retSize; }
/* @@ -178,8 +220,6 @@
return hBitmap; } - -
/*