gpt4 book ai didi

c++ - StretchBlt() 不创建镜像

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:07 24 4
gpt4 key购买 nike

根据 MSDN:

StretchBlt creates a mirror image of a bitmap if the signs of the nWidthSrc and nWidthDest parameters or if the nHeightSrc and nHeightDest parameters differ.

所以我尝试创建颠倒的图像。我有一个看起来像这样的类:

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 兼容性,我一直无法理解其背后的逻辑。

那么,我应该怎么做才能翻转位图?

最佳答案

要翻转图片,您不会否定源的高度 - 您会否定目标的高度。为此,您必须将目标矩形的底部指定为原点,因此您的调用看起来像这样:

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

关于c++ - StretchBlt() 不创建镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16840312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com