利用CImage进行屏幕截图
来源:互联网 发布:chrome比价 知乎 编辑:程序博客网 时间:2024/05/01 22:52
思路:
(1)获取当前顶层窗口(即屏幕)(GetDesktopWindow)
(2)获取当前顶层窗口的绘图设备(CWindowDC)
(3)创建内存图像
(4)将当前顶层窗口图像复制到内存图像中
(5)保存图像
/*
参数:
bFull 如果是真,则截取整个屏幕否则只截取活动窗口.
strPath 是保存图片的路径.
如果函数成功,则将文件保存在指定的路径,格式为PNG
*/
BOOL CaptureScreen(BOOL bFull, CString strPath)
{
CImage image;
CWnd* pWnd;
CRect rect;
BOOL bStat;
if(bFull)
pWnd = CWnd::GetDesktopWindow();
else
pWnd = CWnd::GetActiveWindow();
ASSERT(pWnd);
if(pWnd == NULL)
return FALSE;
CWindowDC winDC(pWnd);
pWnd->GetWindowRect(&rect);
int nBPP = winDC.GetDeviceCaps(BITSPIXEL) * winDC.GetDeviceCaps(PLANES);
if(nBPP < 24) nBPP = 24;
bStat = image.Create(rect.Width(), rect.Height(), nBPP);
ASSERT(bStat);
if(!bStat)
return FALSE;
CImageDC imageDC(image);
::BitBlt(imageDC, 0, 0, rect.Width(), rect.Height(), winDC, 0, 0, SRCCOPY);
CString strFull = MakeFilename(strPath);
HRESULT hr = image.Save(strFull);
if(FAILED(hr))
{
TRACE("Couldn't Save File: %s, %x ", (LPCTSTR)strFull, hr);
return FALSE;
}
return TRUE;
}
// 函数说明:结合路径,自动产生一个文件名
CString MakeFilename(CString& strPath)
{
CString strRet(strPath);
static UINT i=0;
if(strRet.Right(1) != "/")
strRet += "/";
strRet.AppendFormat("%03.3d.png", i++);
return strRet;
}
// 引用方法:
CaptureScreen(TRUE, "c:/");
参数:
bFull 如果是真,则截取整个屏幕否则只截取活动窗口.
strPath 是保存图片的路径.
如果函数成功,则将文件保存在指定的路径,格式为PNG
*/
BOOL CaptureScreen(BOOL bFull, CString strPath)
{
CImage image;
CWnd* pWnd;
CRect rect;
BOOL bStat;
if(bFull)
pWnd = CWnd::GetDesktopWindow();
else
pWnd = CWnd::GetActiveWindow();
ASSERT(pWnd);
if(pWnd == NULL)
return FALSE;
CWindowDC winDC(pWnd);
pWnd->GetWindowRect(&rect);
int nBPP = winDC.GetDeviceCaps(BITSPIXEL) * winDC.GetDeviceCaps(PLANES);
if(nBPP < 24) nBPP = 24;
bStat = image.Create(rect.Width(), rect.Height(), nBPP);
ASSERT(bStat);
if(!bStat)
return FALSE;
CImageDC imageDC(image);
::BitBlt(imageDC, 0, 0, rect.Width(), rect.Height(), winDC, 0, 0, SRCCOPY);
CString strFull = MakeFilename(strPath);
HRESULT hr = image.Save(strFull);
if(FAILED(hr))
{
TRACE("Couldn't Save File: %s, %x ", (LPCTSTR)strFull, hr);
return FALSE;
}
return TRUE;
}
// 函数说明:结合路径,自动产生一个文件名
CString MakeFilename(CString& strPath)
{
CString strRet(strPath);
static UINT i=0;
if(strRet.Right(1) != "/")
strRet += "/";
strRet.AppendFormat("%03.3d.png", i++);
return strRet;
}
// 引用方法:
CaptureScreen(TRUE, "c:/");
相关参考:
CRectTracker
CDC::DrawFocusRect
CreateCompatibleBitmap
http://blog.csdn.net/mynamelj/archive/2006/10/10/1329079.aspx
- 利用CImage进行屏幕截图
- 利用CImage进行屏幕截图
- 这是微软自带的一个利用cimage进行截图的例子,值得看看
- WebDriver进行屏幕截图
- 对屏幕进行截图
- MFC 使用CImage获取到屏幕截图,指定格式保存到文件
- Android上使用SkBitmap 进行屏幕截图
- C#进行屏幕截图简洁代码
- 通过使用GDI+和CImage类配合实现针对目标窗体的子控件进行截图
- 利用Robot类,进行截图,然后保存
- 如何利用Ffmpeg进行视频截图
- java windows 利用ffmpeg进行视频截图
- 屏幕截图
- 屏幕截图
- 屏幕截图
- 屏幕截图
- 屏幕截图
- 屏幕截图
- 破解的DbgView献给大家
- 诺基亚手机大全
- 外部图片加载的设计笔录
- c++ 的new 数组操作
- RealView MDK中如何指定子程序入口地址
- 利用CImage进行屏幕截图
- svn 数据库无法访问的解决2
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 20岁的男人~~~
- ant结合hibernate输出数据库sql语句的build模板
- 英语资源
- shell编程珠玑(1)
- Wise Installation 使用说明
- 用JS解决网站防挂iframe木马的方案