Revert r50519 and r50519

svn path=/trunk/; revision=50931
This commit is contained in:
Timo Kreuzer 2011-02-28 00:19:32 +00:00
parent 62de69219a
commit 04e49a00e3

View file

@ -410,35 +410,6 @@ CreateCompatibleBitmap(
return CreateDIBSection(hDC, (CONST BITMAPINFO *)&dibs.dsBmih, 0, NULL, NULL, 0); return CreateDIBSection(hDC, (CONST BITMAPINFO *)&dibs.dsBmih, 0, NULL, NULL, 0);
} }
void
ConvertBackBitmapInfo(PBITMAPINFO pbmi, PBITMAPINFO pbmiConverted)
{
INT i;
/* Check if we converted from PBITMAPCOREINFO */
if (pbmiConverted != pbmi)
{
PBITMAPCOREINFO pbci = (PBITMAPCOREINFO)pbmi;
/* Convert back header */
pbci->bmciHeader.bcSize = sizeof(BITMAPCOREHEADER);
pbci->bmciHeader.bcWidth = pbmiConverted->bmiHeader.biWidth;
pbci->bmciHeader.bcHeight = pbmiConverted->bmiHeader.biHeight;
pbci->bmciHeader.bcPlanes = 1;
pbci->bmciHeader.bcBitCount = pbmiConverted->bmiHeader.biBitCount;
/* Convert back colors */
for (i = 0; i < pbmiConverted->bmiHeader.biClrUsed; i++)
{
pbci->bmciColors[i].rgbtRed = pbmiConverted->bmiColors[i].rgbRed;
pbci->bmciColors[i].rgbtGreen = pbmiConverted->bmiColors[i].rgbGreen;
pbci->bmciColors[i].rgbtBlue = pbmiConverted->bmiColors[i].rgbBlue;
}
/* Free memory */
RtlFreeHeap(RtlGetProcessHeap(), 0, pbmiConverted);
}
}
INT INT
WINAPI WINAPI
@ -451,9 +422,8 @@ GetDIBits(
LPBITMAPINFO lpbmi, LPBITMAPINFO lpbmi,
UINT uUsage) UINT uUsage)
{ {
PBITMAPINFO pbmiConverted; UINT cjBmpScanSize;
UINT cjBmpScanSize, cjInfoSize; UINT cjInfoSize;
INT iResult;
if (!hDC || !GdiIsHandleValid((HGDIOBJ)hDC) || !lpbmi) if (!hDC || !GdiIsHandleValid((HGDIOBJ)hDC) || !lpbmi)
{ {
@ -461,22 +431,15 @@ GetDIBits(
return 0; return 0;
} }
/* Convert BITMAPINFO to a proper format */
pbmiConverted = ConvertBitmapInfo(lpbmi, uUsage, &cjInfoSize, FALSE);
if (!pbmiConverted)
{
GdiSetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
cjBmpScanSize = DIB_BitmapMaxBitsSize(lpbmi, cScanLines); cjBmpScanSize = DIB_BitmapMaxBitsSize(lpbmi, cScanLines);
cjInfoSize = DIB_BitmapInfoSize(lpbmi, uUsage);
if (lpvBits) if ( lpvBits )
{ {
if (lpbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER)) if ( lpbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER) )
{ {
if (lpbmi->bmiHeader.biCompression == BI_JPEG || if ( lpbmi->bmiHeader.biCompression == BI_JPEG ||
lpbmi->bmiHeader.biCompression == BI_PNG) lpbmi->bmiHeader.biCompression == BI_PNG )
{ {
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return 0; return 0;
@ -484,22 +447,17 @@ GetDIBits(
} }
} }
iResult = NtGdiGetDIBitsInternal(hDC, return NtGdiGetDIBitsInternal(hDC,
hbmp, hbmp,
uStartScan, uStartScan,
cScanLines, cScanLines,
lpvBits, lpvBits,
pbmiConverted, lpbmi,
uUsage, uUsage,
cjBmpScanSize, cjBmpScanSize,
cjInfoSize); cjInfoSize);
ConvertBackBitmapInfo(lpbmi, pbmiConverted);
return iResult;
} }
/* /*
* @implemented * @implemented
*/ */