Я использовал следующий код для изменения размера win32 HBITMAP.
HBITMAP ResizeBitmap(HDC hDC, HBITMAP source)
{
HDC hMemDC2 = CreateCompatibleDC(hDC);
HGDIOBJ hOld2 = SelectObject(hMemDC2, source);
BITMAP bitmap = { 0 };
GetObject(hBitmap, sizeof(BITMAP), &bitmap);
float SCALE = IMAGE_SCALE;
int nWidth = (int)ceil(bitmap.bmWidth / SCALE / 32) * 32;
int nHeight = (int)ceil(bitmap.bmHeight / SCALE / 32) * 32;
int dWidth = (int)round(bitmap.bmWidth / SCALE);
int dHeight = (int)round(bitmap.bmHeight / SCALE);
HDC hMemDC1 = CreateCompatibleDC(hDC);
HBITMAP hBitmap1 = CreateCompatibleBitmap(hDC, nWidth, nHeight);
HGDIOBJ hOld1 = SelectObject(hMemDC1, hBitmap1);
StretchBlt(hMemDC1, 0, 0, dWidth, dHeight, hMemDC2, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);
SelectObject(hMemDC1, hOld1);
SelectObject(hMemDC2, hOld2);
DeleteDC(hMemDC1);
DeleteDC(hMemDC2);
return hBitmap1;
}
Однако я обнаружил, что новое изображение было насыщенным. Как показано ниже, исходное изображение
и новое изображение (игнорируйте зеленый прямоугольник на изображении)
Почему?