想在mfc环境下实现以下操作,
已知图像中4个点的坐标,截取4个点所围成的图像并保存为输出图像。
哪位高手帮忙看一下,不胜感激!
已知图像中4个点的坐标,截取4个点所围成的图像并保存为输出图像。
哪位高手帮忙看一下,不胜感激!
解决方案 »
- HEAP: Free Heap block 16931b0 modified at 1693c40 after it was freed
- 五一放假去图书馆看书.工作后发现Windows系统真牛x.
- 读取.ini
- 求win2000源码
- 窗口置顶问题,各位支支招儿!
- 请问用vector做引数调用函数应该如何写?
- ★★★★ 关于WM_NULL消息?!★★★★
- 如何对HTML文件进行全文检索?
- setup and system management services 和 windows base services 内容有什么其别???
- WSAGetLastError返回结果10053
- 为什么很多线程函数都带有 void *pParam 这个参数?
- 在线的各位大侠,高手,专家,能否为小弟解决一下平台的开发问题,谢谢!!
这其实就是StretchBlt()函数的使用而已,//功能: 截取4个点所围成的图像
//参数: hBmp待截取的位图句柄; hDC设备句柄; (ptLeftTop, pt....)四个点
//返回: 截取后的位图
HBITMAP CTestDlgDlg::SectionBmp(
HBITMAP hBmp, HDC hDC,
POINT ptLeftTop, POINT ptLeftBottom,
POINT ptRightTop, POINT ptRightBottom)
{
int iWidth, iHeight; //截取后位图的尺寸
iWidth = ptRightTop.x - ptLeftTop.x; //宽 = 右上点.X - 左上点.X
iHeight = ptLeftBottom.y - ptLeftTop.y; // 长 = .....
HBITMAP hSctBmp = CreateCompatibleBitmap(hDC, iWidth, iHeight);
HDC hMemDCSrc = CreateCompatibleDC(hDC); //准备两内存设备,一个帖原图
HDC hMemDCDest = CreateCompatibleDC(hDC);//一个贴裁截后的图
//将位图选入设备
SelectObject(hMemDCSrc, hBmp);
SelectObject(hMemDCDest, hSctBmp); StretchBlt(
hMemDCDest, 0, 0, iWidth, iHeight,
hMemDCSrc, ptLeftTop.x, ptLeftTop.y, iWidth, iHeight, SRCCOPY); //释放资源
DeleteDC(hMemDCSrc);
DeleteDC(hMemDCDest); return hSctBmp;
}下面测试下这个函数//单击一个Button,截取并保存位图
void CTestDlgDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HBITMAP hBmp = LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));//加载原图
//所要截取区域,注意四个点一定要形成一个矩形
POINT ptLeftTop = {10, 10};
POINT ptRightTop = {300, 10};
POINT ptLeftBottom = {10, 200};
POINT ptRightBottom = {300, 200};
HBITMAP hSctBmp = SectionBmp(
hBmp, this->GetDC()->m_hDC,
ptLeftTop, ptLeftBottom,
ptRightTop, ptRightBottom); //得到截取后的位图句柄 SaveBmpToFile("SctBmp.bmp", hSctBmp);//保存BMP到文件,参考MSDN
}关于保存位图到文件MSDN有例子,你可以看看,有问题我们再讨论...
至于你要对图像目标区域进行处理,你可按楼上所说的使用一个Region,如果是使用GDI的方法,那可以考虑直接基于Region使用Clip
如果是用自己的算法,除了Region外也可以考虑使用联合一张mask图来处理目标区域