StretchBlt () не создает зеркальное отображение

По данным MSDN:

StretchBlt создает зеркальное отображение растрового изображения, если знаки параметров nWidthSrc и nWidthDest или параметры nHeightSrc и nHeightDest различаются.

Поэтому я попытался создать перевернутый образ. У меня есть класс, который выглядит так:

class Picture
{
private:
HBITMAP bmp; //Bitmap
HDC pdc; //Device context
short int w; //Weidth of bitmap
short int h; //Heighth of bitmap

public:
short int x;
short int y;
void draw(HDC);
void upside_down();
}

и у меня есть этот метод:

void Picture::upside_down()
{
HDC dc = CreateCompatibleDC(pdc);
HBITMAP bmap = CreateCompatibleBitmap(pdc, w, h);
SelectObject(dc, bmap);
BitBlt(dc, 0, 0, w, h, pdc, 0, 0, SRCCOPY);
StretchBlt(pdc, 0, 0, w, h, dc, 0, 0, w, -h, SRCCOPY);
DeleteDC(dc);
DeleteObject(bmap);
}

но это не работает, ничего не происходит. Интересно, если это что-то с совместимостью DC, у меня всегда были проблемы с пониманием логики этого.

Итак, что я должен сделать, чтобы я мог перевернуть мое растровое изображение?

2

Решение

Чтобы перевернуть картинку, вы не отрицаете высоту источника — вы отрицаете высоту пункта назначения. Чтобы пойти с этим, вы должны указать низ вашего конечного прямоугольника в качестве источника, поэтому ваш вызов будет выглядеть примерно так:

StretchBlt(pdc, 0, h, w, -h, dc, 0, 0, w, h, SRCCOPY);
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]