满意可以继续加分,MFC怎么截取指定区域的图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了满意可以继续加分,MFC怎么截取指定区域的图像相关的知识,希望对你有一定的参考价值。

像QQ,当按下Ctrl+ALT+A时会弹出一个窗口,然后我们可以通过鼠标指定截屏区域的大小。想在MFC主窗口中内嵌一个半透明的窗口,这个窗口的大小和位置可以通过鼠标调整(当然不会超出MFC主窗口的范围),窗口位置和大小调整好后,MFC能一直截取这个区域的图像,当下次截屏时不需要重新指定截屏区域,这个怎么做?我用的vs 2010,谢谢!

参考技术A

这个问题涉及三个部分:鼠标定区、复制和保存图像、区域坐标存储。你的说明并不明确。

    这个截屏和QQ的截屏不一样,只是窗口范围的话,在窗口OnMouseMove里面做就可以了,涉及的主要是SetCapture、SetROP2、AlphaBlend等函数的使用,百度这些函数名,相关示例代码很多。

    复制和保存你的需求很模糊,可以使用内存DC、序列化、剪贴板等方法都可以,看你的需求了。(百度“VC 图像 剪贴板”)

    记录和恢复坐标数据,如果希望关闭程序后再次打开依然有效,你需要存储这些坐标(一个RECT或者两个POINT)到本地,可以通过注册表、INI文件(WritePrivateProfileInt)或者文本文件保存(CFile::Read/Write)。

其实这些功能,每个单独去百度相关关键词,都能得到参考代码,单个功能并不复杂,但要根据实际需求和情况来选择使用。

追问

能帮我写个程序不?我MFC不怎么懂,就会C语言

追答

抱歉,只帮忙分析问题不代做。

如何截取某一窗口内的图像 VC

如何截取某一窗口内的图像,类似游戏中截图,按下键盘中按键,只截取该程序窗口内的图象。

参考技术A 取得client句柄->取得其DC->用CDC的函数将该DC的内容blt到bmp中。
总之取得窗口的CDC是肯定要的,能成功取得了以后你可以用CDC的函数按照你的需要来做
参考技术B 这个很简单呀,只要你了解位图的结构,然后把屏幕的区域象素保存到位图里就可以啦。 参考技术C 你用原生的api BOOL GetClientRect( HWND hWnd,LPRECT lpRect); 不用MFC的试试看呢?用 GetForegroundWindow 获取前端窗口句柄 参考技术D void GetWindowClientImg(HWND hwnd, HDC hdc)

RECT rect;
GetClientRect(hwnd, &rect);
HDC whdc = GetDC(hwnd);
BitBlt(hdc, 0, 0, rect.right, rect.bottom, whdc, 0, 0, SRCCOPY);
ReleaseDC(hwnd, whdc);
本回答被提问者采纳

以上是关于满意可以继续加分,MFC怎么截取指定区域的图像的主要内容,如果未能解决你的问题,请参考以下文章

基于python语言的opencv如何把图片中指定区域截取出来?

makefile中怎么通配一个文件夹下的所有源文件?急!满意追加分!

如何截取某一窗口内的图像 VC

如何用MFC打印指定excel

利用OpenCV窗口鼠标事件设置函数setMouseCallback()实现显示当前鼠标坐标截取指定区域图像等功能;顺便介绍函数putText()circle()rectangle()

MFC中如何在指定的区域响应鼠标单击事件