用VC++如何获取屏幕图像,且显示出来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用VC++如何获取屏幕图像,且显示出来相关的知识,希望对你有一定的参考价值。

用VC++如何获取屏幕图像,且在用一个对话框按钮就能将刚才获取的屏幕图像显示出来。注意是一按下按钮就显示出来,不是要选择路径那种!还有就是对话框按钮那个悬浮按钮在获取屏幕图像时,不要获取!最好有个工程源码,还有设计过程!

HBITMAP holdbitmap,hbitmap;
HDC hdc,hscreendc,hmemdc;
hdc=GetWindowDC(hwnd);//获得整个hwnd指向的窗口的DC
GetWindowRect(hwnd,&rect);//获得窗口矩形
hscreendc=CreateDC("DISPLAY",NULL,NULL,NULL);//获得整个屏幕的设备DC
hmemdc=CreateCompatibleDC(hdc);//创建与设备DC兼容的内存DC
hbitmap=CreateCompatibleBitmap(hscreendc,GetDeviceCaps(hdcScreen,HORZRES),GetDeviceCaps(hdcScreen,VERTRES)); //创建与屏幕DC兼容的位图
holdbitmap=(HBITMAP)SelectObject(hmemdc,hbitmap);//将hbitmap指向的位图选入内存DC,返回值为原来的位图holdbitmap,先保存下来后面恢复
BitBlt(hmemdc,0,0,rect.right-rect.left,rect.bottom-rect.top,hscreendc,0,0,SRCCOPY);//将设备DC的图象复制到内存DC,这样就把屏幕图象保存到hbitmap所指向的BITMAP结构体中了

点击按钮后,再用BitBlt显示出来:
case WM_COMMAND:
holdbitmap=(HBITMAP)SelectObject(hmemdc,hbitmap);//将保存图象的hbitmap选进内存DC
BitBlt(hdc,0,0,rect.right-rect.left,rect.bottom-rect.top,hmemdc,0,0,SRCCOPY);//将内存DC的图象显示到窗口上
以上注意hbitmap变量的作用范围
参考技术A 代码如下:

HBITMAP holdbitmap,hbitmap;
HDC hdc,hscreendc,hmemdc;
hdc=GetWindowDC(hwnd);//获得整个hwnd指向的窗口的DC
GetWindowRect(hwnd,&rect);//获得窗口矩形
hscreendc=CreateDC("DISPLAY",NULL,NULL,NULL);//获得整个屏幕的设备DC
hmemdc=CreateCompatibleDC(hdc);//创建与设备DC兼容的内存DC
hbitmap=CreateCompatibleBitmap(hscreendc,GetDeviceCaps(hdcScreen,HORZRES),GetDeviceCaps(hdcScreen,VERTRES)); //创建与屏幕DC兼容的位图
holdbitmap=(HBITMAP)SelectObject(hmemdc,hbitmap);//将hbitmap指向的位图选入内存DC,返回值为原来的位图holdbitmap,先保存下来后面恢复
BitBlt(hmemdc,0,0,rect.right-rect.left,rect.bottom-rect.top,hscreendc,0,0,SRCCOPY);//将设备DC的图象复制到内存DC,这样就把屏幕图象保存到hbitmap所指向的BITMAP结构体中了
参考技术B 建议你上这个网站下一个源码小程序,里面讲得很清楚:http://www.yumaonline.cn/

如何用vc6.0 来做图像处理?是用mfc工程吗,然后导入图像么? 如何去掉图像的背景,然后反转

如何去掉图像的背景,
然后反转,就是左右对换,
把2张图片和在一起,一个前背景,一个是后背景。
还有去噪音什么的,谁懂这个东西?求指导

首先是图像的打开问题,你可以用其他的库来实现,这样方便
如果用这些库的话显示也就很方便了,可以用cximage、gdi+、opencv等,你可以用一下opencv
一般用mfc因为用这个比sdk简单
去掉背景那要看你怎么去,图像处理的算法很多,但是不一定能能够适用于你的图像,反转这个算法实现起来很容易,得到图像的数据区,然后逐行扫描交换数据即可
不知道你这个把两张图片和在一起是什么意思,是图像的融合呢,还是图像的加减操作等
去噪声很多,一般采用滤波的发放,也可以变换到频率域进行操作
你可以找一下这方面的书看一下,数字图像处理的书还是很多的,再找一下vc数字图像处理,教你怎么样在vc的框架下进行处理,其实关键在于算法追问

老师不让用open cv 说自己编程序写
但是现在不知道从何入手,不知道怎么建立工程,是直接建立一个mfc工程呢,还是直接建立一个c source文件呢,您有qq么,详细探讨一下,我可以再加50分

程序会写一些,就是不知道从何入手,不知道如何导入图像

追答

951019915

参考技术A 可以用mfc工程,可以导入图像,但是一般是通过打开文件来动态打开,去掉图像的背景之类的知识是计算机图形图像学的范畴了,你需要去找些计算机图形图像学的书籍来看看。 参考技术B 图像处理主要是算法,而不是 界面,
完全可以用文件的方式来 达到处理对比的效果,
比如两张图片文件,通过程序读入,然后程序处理,输出为文件,也可以进行效果对比。
个人认为 先熟悉算法再 熟悉界面的编写,不要搞混了追问

介绍一个 如何只用一个文件来处理 而不需要工程

以上是关于用VC++如何获取屏幕图像,且显示出来的主要内容,如果未能解决你的问题,请参考以下文章

VC++如何获取并保存桌面背景?

Android中如何获取屏幕的分辨率?

Android中如何获取屏幕的分辨率?

VC++6.0 如何获取窗口客户区域在屏幕中的位置

如何从firebase存储中获取图片,图片的网址在firestore中。

如何从 UIImagePickerController 获取图像并传递给下一个 VC