图像抓取后,显示出问题。

weida123 2008-03-20 07:12:22
打开一幅BMP位图后,在上面任意选取一矩形区域,想要把这一矩形区域再单独显示出来,我的想法是先将这一矩形区域送到剪贴板,然后再将剪贴板上的图像显示出来。现在的问题是显示后的图像下半部分是原先矩形区域内的上半部分图像,而上半部分图像不是原先矩形区域内的图像。请教高手?谢谢。看看下面这段代码哪里出问题了。
int nX, nY, nX2, nY2;
int nWidth, nHeight;
nX=LPRECT(m_rectTracker.m_rect)->left;//m_rectTracker为矩形区域
nY=LPRECT(m_rectTracker.m_rect)->top;
nX2=LPRECT(m_rectTracker.m_rect)->right;
nY2=LPRECT(m_rectTracker.m_rect)->bottom;
nWidth = nX2 - nX;
nHeight = nY2 - nY;
/*CString str;
str.Format("%d nX",nX);
AfxMessageBox(str,MB_OK);*/

HDC hMemDC, hScrDC;
HBITMAP hBitmap, hOldBitmap;
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
hMemDC = CreateCompatibleDC(hScrDC);
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
//CDC dcCompatible;
//dcCompatible.CreateCompatibleDC(CDC::FromHandle(hMemDC));
//dcCompatible.SelectObject(m_pBitmap);
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC , nX, nY, SRCCOPY);
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
DeleteDC(hScrDC);
DeleteDC(hMemDC);
if (OpenClipboard())
{
//清空剪贴板
EmptyClipboard();
//把屏幕内容粘贴到剪贴板上,
//hBitmap 为刚才的屏幕位图句柄
SetClipboardData(CF_BITMAP, hBitmap);
//关闭剪贴板
CloseClipboard();
}
OnEditPaste();//将剪贴板上的图像显示出来的函数
...全文
63 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
好像没那么简单,呵呵.
weida123 2008-03-21
  • 打赏
  • 举报
回复
to:lyserver
为什么将hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
DeleteDC(hScrDC);
DeleteDC(hMemDC);
放到放到OnEditPaste语句之后,还是有问题.
zyyoung 2008-03-20
  • 打赏
  • 举报
回复
vckbase里有qq截图得实现方法,参考下
lyserver 2008-03-20
  • 打赏
  • 举报
回复
你的代码可能问题。
一、在使用SetClipboardData函数前,为什么要使用hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);语句还原hMemDC上下文中默认的空位图呢?
二、在使用DeleteDC(hMemDC)删除位图后使用hBitmap是非法的。
你能得到一半的位图是一种幸运,有时甚至为什么都没有。
建议:1、将以下语句
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
DeleteDC(hScrDC);
DeleteDC(hMemDC);
放到OnEditPaste语句之后。
2、从你的问题上看,使用剪切板完全不必要,直接使用BitBlt就可实现剪裁。
相关推荐
发帖
图形处理/算法

1.9w+

社区成员

VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
帖子事件
创建了帖子
2008-03-20 07:12
社区公告
暂无公告