根据MSDN:
如果nWidthSrc和nWidthDest参数的符号或者nHeightSrc和nHeightDest参数不同,StretchBlt会创建位图的镜像。
所以我尝试创建颠倒的图像。我的班级看起来像这样:
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兼容性,我总是在理解背后的逻辑时遇到了问题。
那么,我应该怎么做才能让我的位图翻转?
答案 0 :(得分:5)
要翻转图片,您不要否定源的高度 - 否定目标的高度。要使用此功能,您必须将目标矩形的底部指定为原点,因此您的调用将如下所示:
StretchBlt(pdc, 0, h, w, -h, dc, 0, 0, w, h, SRCCOPY);