Я пытаюсь использовать StretchBlt для того, чтобы скопировать пиксели из памяти HDC в окно HDC.
Память hdc получает изображение из невидимого окна, которое отображает поток с использованием openGL.
Вот мой код:
BITMAPINFOHEADER createBitmapHeader(int width, int height) {
BITMAPINFOHEADER header;
header.biSize = sizeof(BITMAPINFOHEADER);
header.biWidth = width;
header.biHeight = height;
header.biPlanes = 1;
header.biBitCount = 32;
header.biCompression = BI_RGB;
header.biSizeImage = 0;
header.biXPelsPerMeter = 0;
header.biYPelsPerMeter = 0;
header.biClrUsed = 0;
header.biClrImportant = 0;
return header;
}
...
HDC memoryHdc = CreateCompatibleDC(windowHdc);
BITMAPINFO bitmapInfo;
bitmapInfo.bmiHeader = createBitmapHeader(targetDimensions.width, targetDimensions.height);
HBITMAP bitmap = CreateDIBitmap(windowHdc, &bitmapInfo.bmiHeader, CBM_INIT, offscreenBuffer, &bitmapInfo, DIB_RGB_COLORS);
SelectObject(memoryHdc, bitmap);
DeleteObject(bitmap);
SetStretchBltMode(windowHdc, COLORONCOLOR);
StretchBlt(windowHdc,
targetDimensions.x, targetDimensions.y,
targetDimensions.width, -targetDimensions.height,
memoryHdc,
sourceDimensions.x, sourceDimensions.y,
sourceDimensions.width, sourceDimensions.height,
SRCCOPY);
DeleteDC(memoryHdc);
куда windowHdc
это HDC окна, к которому я хочу StretchBlt
скопировать пиксели и offscreenBuffer
это void*
на пиксели, скопированные из закадрового окна, в котором работает openGL.
Этот код прекрасно работает, за исключением того, что изображение перевернуто, и я хочу, чтобы оно было перевернуто вертикально.
Я знаю, что это происходит потому, что:
Если nHeightSrc и nHeightDest имеют разные знаки, функция
создает зеркальное отображение растрового изображения вдоль оси Y
Но когда я удаляю знак минус и высота цели и источника совпадают, я не вижу изображения в окне.
Просто чтобы проверить, я попытался поставить минус на sourceDimensions.height
но это также приводит к отсутствию изображения, и то же самое, если я пытаюсь отрицать ширину (и цель, и источник).
Есть идеи почему?
Благодарю.
Задача ещё не решена.