如何将屏幕dc拷贝到内存dc

W1nds 2013-10-12 11:17:33
	m_hDeskTopWnd = GetDesktopWindow();
m_hFullDC = GetDC(m_hDeskTopWnd);
hTmpMemDC = CreateCompatibleDC(m_hFullDC);
m_hTmpBitmap = CreateCompatibleBitmap(m_hFullDC,m_nFullWidth,m_nFullHeight);
::SelectObject(hTmpMemDC,m_hTmpBitmap);
::BitBlt(hTmpMemDC, 0, 0, m_nFullWidth, m_nFullHeight, m_hFullDC, 0, 0, m_dwBitBltRop);

对图像处理这块不是很熟悉,请问下 这样操作是否正确,谢谢~~
...全文
565 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
W1nds 2013-10-12
  • 打赏
  • 举报
回复
引用 11 楼 zhousitiaoda 的回复:
m_dwBitBltRop是什么?用BitBlt我只用过SRCCOPY这个参数。如果只是拷贝应该是没问题的
对的就是SRCCOPY
zhousitiaoda 2013-10-12
  • 打赏
  • 举报
回复
m_dwBitBltRop是什么?用BitBlt我只用过SRCCOPY这个参数。如果只是拷贝应该是没问题的
W1nds 2013-10-12
  • 打赏
  • 举报
回复
引用 9 楼 zhousitiaoda 的回复:
可以,对hTmpMemDC操作完后再贴到m_hFullDC上去。
::BitBlt(m_hOtherMemDC, lpRect->left, lpRect->top, nRectWidth, nRectHeight, m_hFullDC, lpRect->left, lpRect->top, m_dwBitBltRop); m_hFullDC换为我的内存dchTmpMemDC后,就取不到数据,这是为啥呢。。 BitBlt将内存dc转到内存dc没问题吧?
zhousitiaoda 2013-10-12
  • 打赏
  • 举报
回复
可以,对hTmpMemDC操作完后再贴到m_hFullDC上去。
W1nds 2013-10-12
  • 打赏
  • 举报
回复
::BitBlt(m_hOtherMemDC, lpRect->left, lpRect->top, nRectWidth, nRectHeight, m_hFullDC, lpRect->left, lpRect->top, m_dwBitBltRop); m_hFullDC换为我的内存dchTmpMemDC后,就取不到数据,这是为啥呢。。
W1nds 2013-10-12
  • 打赏
  • 举报
回复
引用 4 楼 worldy 的回复:
基本正确,hTmpMemDC m_hTmpBitmap在函数返回前,要删除
引用 6 楼 zhousitiaoda 的回复:
正确。不过好的习惯是seleceobject要恢复下
是不是之后对m_hFullDC的操作都可以 通过对hTmpMemDC来操作了,我这里的操作只是用BitBlt取数据到另一个内存dc
zhousitiaoda 2013-10-12
  • 打赏
  • 举报
回复
正确。不过好的习惯是seleceobject要恢复下
worldy 2013-10-12
  • 打赏
  • 举报
回复
基本正确,hTmpMemDC m_hTmpBitmap在函数返回前,要删除
W1nds 2013-10-12
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
你是想做屏幕截图吗?
对的,屏幕传输
Eleven 2013-10-12
  • 打赏
  • 举报
回复
你是想做屏幕截图吗?
Eleven 2013-10-12
  • 打赏
  • 举报
回复
SRCCOPY ??

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧