Commit 352b8bc9 authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

Make sure we create a polychrome bitmap from the dib. CreateDIBitmap

doesn't do this when the dib is 1bpp and has a black/white colour table. In such cases this resulted in a monochrome bitmap being StretchBlt'ed which is clearly incorrect since we then start using text and bkgnd colours.
parent 50c9ff03
...@@ -164,7 +164,7 @@ INT WINAPI StretchDIBits(HDC hdc, INT xDst, INT yDst, INT widthDst, ...@@ -164,7 +164,7 @@ INT WINAPI StretchDIBits(HDC hdc, INT xDst, INT yDst, INT widthDst,
dc = DC_GetDCUpdate( hdc ); dc = DC_GetDCUpdate( hdc );
if(!dc) return FALSE; if(!dc) return FALSE;
if(dc->funcs->pStretchDIBits) if(dc->funcs->pStretchDIBits)
{ {
heightSrc = dc->funcs->pStretchDIBits(dc->physDev, xDst, yDst, widthDst, heightSrc = dc->funcs->pStretchDIBits(dc->physDev, xDst, yDst, widthDst,
...@@ -179,6 +179,10 @@ INT WINAPI StretchDIBits(HDC hdc, INT xDst, INT yDst, INT widthDst, ...@@ -179,6 +179,10 @@ INT WINAPI StretchDIBits(HDC hdc, INT xDst, INT yDst, INT widthDst,
GDI_ReleaseObj( hdc ); GDI_ReleaseObj( hdc );
hdcMem = CreateCompatibleDC( hdc ); hdcMem = CreateCompatibleDC( hdc );
hBitmap = CreateCompatibleBitmap(hdc, info->bmiHeader.biWidth,
info->bmiHeader.biHeight);
hOldBitmap = SelectObject( hdcMem, hBitmap );
if (info->bmiHeader.biCompression == BI_RLE4 || if (info->bmiHeader.biCompression == BI_RLE4 ||
info->bmiHeader.biCompression == BI_RLE8) { info->bmiHeader.biCompression == BI_RLE8) {
...@@ -196,22 +200,15 @@ INT WINAPI StretchDIBits(HDC hdc, INT xDst, INT yDst, INT widthDst, ...@@ -196,22 +200,15 @@ INT WINAPI StretchDIBits(HDC hdc, INT xDst, INT yDst, INT widthDst,
* pStretchDIBits function shall be implemented. * pStretchDIBits function shall be implemented.
* ericP (2000/09/09) * ericP (2000/09/09)
*/ */
hBitmap = CreateCompatibleBitmap(hdc, info->bmiHeader.biWidth,
info->bmiHeader.biHeight); /* copy existing bitmap from destination dc */
hOldBitmap = SelectObject( hdcMem, hBitmap ); StretchBlt( hdcMem, xSrc, abs(info->bmiHeader.biHeight) - heightSrc - ySrc,
widthSrc, heightSrc, hdc, xDst, yDst, widthDst, heightDst,
/* copy existing bitmap from destination dc */ dwRop );
StretchBlt( hdcMem, xSrc, abs(info->bmiHeader.biHeight) - heightSrc - ySrc, }
widthSrc, heightSrc, hdc, xDst, yDst, widthDst, heightDst,
dwRop ); SetDIBits(hdcMem, hBitmap, 0, info->bmiHeader.biHeight, bits,
SetDIBits(hdcMem, hBitmap, 0, info->bmiHeader.biHeight, bits, info, wUsage);
info, DIB_RGB_COLORS);
} else {
hBitmap = CreateDIBitmap( hdc, &info->bmiHeader, CBM_INIT,
bits, info, wUsage );
hOldBitmap = SelectObject( hdcMem, hBitmap );
}
/* Origin for DIBitmap may be bottom left (positive biHeight) or top /* Origin for DIBitmap may be bottom left (positive biHeight) or top
left (negative biHeight) */ left (negative biHeight) */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment