Optimized StretchDIBits to call SetDIBitsToDevice (when src & dst
dimensions are equal).
This commit is contained in:
parent
73077e3d61
commit
2818a67635
|
@ -135,33 +135,39 @@ INT WINAPI StretchDIBits(HDC hdc, INT xDst, INT yDst, INT widthDst,
|
|||
const BITMAPINFO *info, UINT wUsage, DWORD dwRop )
|
||||
{
|
||||
DC *dc = DC_GetDCPtr( hdc );
|
||||
|
||||
if(!dc) return FALSE;
|
||||
|
||||
if (widthDst == widthSrc && heightDst == heightSrc && dwRop == SRCCOPY) {
|
||||
return SetDIBitsToDevice( hdc, xDst, yDst, widthDst, heightDst,
|
||||
xSrc, ySrc, 0, info->bmiHeader.biHeight,
|
||||
bits, info, 0/*FIXME coloruse*/ );
|
||||
}
|
||||
|
||||
if(dc->funcs->pStretchDIBits)
|
||||
return dc->funcs->pStretchDIBits(dc, xDst, yDst, widthDst,
|
||||
heightDst, xSrc, ySrc, widthSrc,
|
||||
heightSrc, bits, info, wUsage,
|
||||
dwRop);
|
||||
else { /* use StretchBlt32 */
|
||||
HBITMAP hBitmap, hOldBitmap;
|
||||
HDC hdcMem;
|
||||
|
||||
hBitmap = CreateDIBitmap( hdc, &info->bmiHeader, CBM_INIT,
|
||||
bits, info, wUsage );
|
||||
hdcMem = CreateCompatibleDC( hdc );
|
||||
hOldBitmap = SelectObject( hdcMem, hBitmap );
|
||||
/* Origin for DIBitmap is bottom left ! */
|
||||
StretchBlt( hdc, xDst, yDst, widthDst, heightDst,
|
||||
hdcMem, xSrc, info->bmiHeader.biHeight - heightSrc - ySrc,
|
||||
widthSrc, heightSrc, dwRop );
|
||||
SelectObject( hdcMem, hOldBitmap );
|
||||
DeleteDC( hdcMem );
|
||||
DeleteObject( hBitmap );
|
||||
return heightSrc;
|
||||
HBITMAP hBitmap, hOldBitmap;
|
||||
HDC hdcMem;
|
||||
|
||||
hBitmap = CreateDIBitmap( hdc, &info->bmiHeader, CBM_INIT,
|
||||
bits, info, wUsage );
|
||||
hdcMem = CreateCompatibleDC( hdc );
|
||||
hOldBitmap = SelectObject( hdcMem, hBitmap );
|
||||
/* Origin for DIBitmap is bottom left ! */
|
||||
StretchBlt( hdc, xDst, yDst, widthDst, heightDst,
|
||||
hdcMem, xSrc, info->bmiHeader.biHeight - heightSrc - ySrc,
|
||||
widthSrc, heightSrc, dwRop );
|
||||
SelectObject( hdcMem, hOldBitmap );
|
||||
DeleteDC( hdcMem );
|
||||
DeleteObject( hBitmap );
|
||||
}
|
||||
return heightSrc;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* SetDIBits16 (GDI.440)
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue