Windows GDI 提供兩種拉伸繪制位圖的 API,本文對比其原理、代碼模式與實測性能。
SelectObject 進內存 DC;StretchBlt(hdcDst, x, y, w, h, hdcSrc, 0, 0, bmW, bmH, SRCCOPY);StretchDIBits(hdcDst, x, y, w, h, 0, 0, bmW, bmH, pBits, lpBMI, DIB_RGB_COLORS, SRCCOPY);// StretchBlt
HDC hMem = CreateCompatibleDC(hdc);
HBITMAP hOld = (HBITMAP)SelectObject(hMem, hbm);
BITMAP bm; GetObject(hbm, sizeof(bm), &bm);
StretchBlt(hdc, x, y, w, h, hMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
SelectObject(hMem, hOld); DeleteDC(hMem);
// StretchDIBits
StretchDIBits(hdc, x, y, w, h, 0, 0, bmi->biWidth, abs(bmi->biHeight),
pBits, (BITMAPINFO*)bmi, DIB_RGB_COLORS, SRCCOPY);