裁剪函数BitBlt(...) [英] Crop function BitBlt(...)

查看:239
本文介绍了裁剪函数BitBlt(...)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在现有引擎中创建裁剪功能。这是我已经有了:

I want to create a crop function in an existing engine. This is what I already have:

bool Bitmap::Crop(RECT cropArea)
{
BITMAP bm;
GetObject(m_Handle, sizeof(bm), &bm);

HDC hSrc = CreateCompatibleDC(NULL);
SelectObject(hSrc, m_Handle);

HDC hNew = CreateCompatibleDC(NULL);
HBITMAP hBmp = CreateCompatibleBitmap(hNew, bm.bmWidth, bm.bmHeight);
HBITMAP hOld = (HBITMAP)SelectObject(hNew, hBmp);

BitBlt(hNew, 0, 0, bm.bmWidth, bm.bmHeight, hSrc, 0, 0, SRCCOPY);

SelectObject(hNew, hOld);

DeleteDC(hSrc);
DeleteDC(hNew);

DeleteObject(m_Handle);

m_Handle = hBmp;
}



我希望它只是将整个映像复制到一个新的HBITMAP,老与它。所以我知道它的工作。之后它只是使用BitBlt参数。

I want it to just copy the whole image to a new HBITMAP and replace the old with it. So I know that it works. After that it is just playing with the BitBlt parameters.

m_Handle是Bitmap类的HBITMAP。

m_Handle is a HBITMAP of the class Bitmap.

推荐答案

不要从新鲜的内存DC创建兼容的位图。
除非你想创建一个1bpp位图 - 在一个新的内存DC中选择的默认位图是一个1x1 1bpp位图 - 所以任何兼容的位图创建将匹配。
这往往会导致所有的黑色输出。

Never create a compatible bitmap from a 'fresh' memory DC. Unless that is you WANT to create a 1bpp bitmap - the default bitmap selected in a new memory DC is a 1x1 1bpp bitmap - so any compatible bitmap you create will match that. Which does tend to result in all black output.

您的颜色位图在hSrc,所以使用 dc 新位图。

Your color bitmap in in hSrc, so use that dc to make the new bitmap.

这篇关于裁剪函数BitBlt(...)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆