- 4
- 0
- 约8.18千字
- 约 11页
- 2017-01-07 发布于北京
- 举报
[抓屏原理
Windows抓屏的各种方法(1)
2007-12-07 23:01
导言
有时候我们需要编程抓取整个屏幕上的内容,下面我将介绍抓屏是如何实现的。典型地,我们可以用GID和DirectX来完成,另外一个选择是Windows Media API,在这篇文章我会逐一加以分析。在每一种方法里,一旦我们把屏幕的内容保存到了程序定义的内存块或bitmap文件里,我们就可以进一步利用它们来生成动画和电影,这个过程你可以参考“从HBitmap创建电影”一文中,以获得更多的帮助。
用GDI函数抓屏
如果我们不太在意抓屏的效率,并且我们想要的只是一个屏幕快照的话,可以考虑使用GDI方式。这种抓屏机制是以“桌面也是一个窗口,桌面也有一个窗口句柄(HWND)”这个简单的常识为基础的,如果我们得到了桌面的设备上下文(DC),就可以利用blit(复制)它的内容到我们创建的DC中。我们可以用GetDeskWindow()得到桌面的窗口句柄,从句柄得到DC也是很容易的。具体的实现步骤为:
1.????????? 通过GetDesktopWindow()函数得到桌面的窗口句柄
2.????????? 用GetDC()取得桌面窗口的DC
3.????????? 创建和屏幕DC兼容的位图和DC(CreateCompatibleBitmap ()和CreateCompatibleDC()),并把这个位图选进该DC(SelectObject())
4.????????? 当你准备好抓屏时,就复制桌面窗口DC的内容到兼容DC,你就完成的抓屏过程,兼容位图中就是抓屏时刻的屏幕内容
5.????????? 完成后别忘了释放你创建的对象,内存是宝贵的(对别的程序来说)
示例代码:
void CaptureScreen()
{
??? int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
??? int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
??? HWND hDesktopWnd = GetDesktopWindow();
??? HDC hDesktopDC = GetDC(hDesktopWnd);
??? HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
??? HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC,
??????? nScreenWidth, nScreenHeight);
??? SelectObject(hCaptureDC,hCaptureBitmap);
??? BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);
??? SaveCapturedBitmap(hCaptureBitmap); //Place holder - Put your code
??????????????????????????????? //here to save the captured image to disk
??? ReleaseDC(hDesktopWnd,hDesktopDC);
??? DeleteDC(hCaptureDC);
??? DeleteObject(hCaptureBitmap);
}
上面代码段中,GetSystemMetrics()返回屏幕的宽度(SM_CXSCREEN)和高度(SM_CYSCREEN)。关于如何保存抓到的位图到文件和如何置到剪贴板,请参看附带的源代码,很简单的。示例代码每隔一段时间就通过上述技术抓屏,并把图像序列保存到动画。
Windows抓屏的各种方法(2)
2007-12-07 23:03
DirectX方式
用DreictX进行抓屏也是很简单的,DirectX提供了很优雅的实现。
每个DirectX程序都包含一个被我们称作缓冲的内存区域,其中保存了和该程序有关的显存内容,这在程序中被称作后台缓冲(Back Buffer),有些程序有不止一个的后台缓冲。还有一个缓冲,在默认情况下每个程序都可以访问-前台缓冲。前台缓冲保存了和桌面相关的显存内容,实质上就是屏幕图像。
我们的程序通过访问前台缓冲就可以捕捉到当前屏幕的内容。由DirectX的底层优化机制做保证,我们的抓屏效率是很高的,至少比GDI方式高。
在DirectX程序中访问前台缓冲是很简单的,IDirect3DDevi
您可能关注的文档
- [四上九色鹿.doc
- [技干科总结及计划2013.doc
- [四个自我能力.doc
- [技术与计量练习题汇总.doc
- [技术中心主任考评条款.doc
- [嚯嚯哈哈各种坚果营养价值及其作用.doc
- [技术中心岗位说明书.doc
- [四个阶段搞定考研英语复习.doc
- [最新高考作文素材2.ppt
- [技术交底-箱梁一级.doc
- 广东省广州省实验中学教育集团2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州大学附属中学2025-2026学年八年级上学期奥班期中物理试题(解析版).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(含答案).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(解析版).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 2026《中国人寿上海分公司营销员培训体系优化研究》18000字.docx
- 《生物探究性实验教学》中小学教师资格模拟试题.docx
最近下载
- 西师版五年级数学下册全套电子教案(表格式)(最全).doc VIP
- 2025年AWS认证CloudFront与Route53延迟_地理路由缓存行为专题试卷及解析.pdf VIP
- 2025年互联网营销师元宇宙互动剧本杀与沉浸式剧情营销专题试卷及解析.pdf VIP
- 2025年房地产经纪人投资回报率与投资回报率自动化分析专题试卷及解析.pdf VIP
- 2025年无人机驾驶员执照国际民航组织(ICAO)标准专题试卷及解析.pdf VIP
- 井下中央变电所高压开关整定计算说明书.pdf
- 2025年房地产经纪人商品房交付条件与标准专题试卷及解析.pdf VIP
- 异位妊娠护理教学查房【40页】.pptx VIP
- PLC-S7-200-SMART-与LabVIEW-OPC-以太网通信.pdf VIP
- 全球百强创新集群排行榜.pdf VIP
原创力文档

文档评论(0)