【发布时间】:2013-05-26 06:33:19
【问题描述】:
根据 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 兼容性有关,我一直无法理解其背后的逻辑。
那么,我应该怎么做才能让我的位图翻转?
【问题讨论】:
-
翻转逻辑看起来是对的。 “什么都没有发生”是指根本没有图像吗?也没有没有负高度的图像?想必你还有什么问题……
-
好吧,当我尝试更改一些参数时,我得到了,例如,完全黑暗的图像。我在代码中显示的这些参数似乎是正确的,但我得到的不是翻转的图像,而是始终不变的相同图像。
标签: c++ winapi bitmap gdi stretchblt