c++截取屏幕图片并保存(函数代码实现)
2016-07-29 07:59
573 查看
[cpp] view
plain copy
print?
<strong> //获取桌面窗口的CDC
CDC *pdeskdc = GetDesktopWindow()->GetDC();
CRect re;
//获取窗口的大小
GetDesktopWindow()->GetClientRect(&re);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pdeskdc , re.Width() , re.Height());
//创建一个兼容的内存画板
CDC memorydc;
memorydc.CreateCompatibleDC(pdeskdc);
//选中画笔
CBitmap *pold = memorydc.SelectObject(&bmp);
//绘制图像
memorydc.BitBlt(0,0,re.Width() ,re.Height(), pdeskdc , 0 ,0 ,SRCCOPY) ;
//获取鼠标位置,然后添加鼠标图像
CPoint po;
GetCursorPos(&po);
HICON hinco = (HICON)GetCursor();
memorydc.DrawIcon(po.x-10 , po.y - 10 , hinco);
//选中原来的画笔
memorydc.SelectObject(pold);
BITMAP bit;
bmp.GetBitmap(&bit);
// DWORD size = bit.bmWidth * bit.bmHeight ;
//定义 图像大小(单位:byte)
DWORD size = bit.bmWidthBytes * bit.bmHeight ;
LPSTR lpdata = (LPSTR)GlobalAlloc(GPTR , size) ;
//后面是创建一个bmp文件的必须文件头,想要了解可以参考msdn
BITMAPINFOHEADER pbitinfo;
pbitinfo.biBitCount = 24 ;
pbitinfo.biClrImportant = 0;
pbitinfo.biCompression = BI_RGB ;
pbitinfo.biHeight = bit.bmHeight ;
pbitinfo.biPlanes = 1 ;
pbitinfo.biSize = sizeof(BITMAPINFOHEADER);
pbitinfo.biSizeImage =size;
pbitinfo.biWidth = bit.bmWidth;
pbitinfo.biXPelsPerMeter = 0;
pbitinfo.biYPelsPerMeter = 0 ;
GetDIBits(pdeskdc->m_hDC , bmp , 0 , pbitinfo.biHeight , lpdata ,
(BITMAPINFO*)&pbitinfo,DIB_RGB_COLORS);
BITMAPFILEHEADER bfh;
bfh.bfReserved1 = bfh.bfReserved2 = 0 ;
bfh.bfType = ((WORD)('M'<< 8)|'B');
bfh.bfSize = 54 + size ;
bfh.bfOffBits = 54 ;
//写入文件
CFile file;
if ( file.Open("1.bmp" , CFile::modeCreate|CFile::modeWrite) )
{
file.WriteHuge( &bfh , sizeof(BITMAPFILEHEADER) );
file.WriteHuge(&pbitinfo , sizeof(BITMAPINFOHEADER));
file.WriteHuge(lpdata , size);
file.Close();
}
GlobalFree(lpdata);</strong>
plain copy
print?
<strong> //获取桌面窗口的CDC
CDC *pdeskdc = GetDesktopWindow()->GetDC();
CRect re;
//获取窗口的大小
GetDesktopWindow()->GetClientRect(&re);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pdeskdc , re.Width() , re.Height());
//创建一个兼容的内存画板
CDC memorydc;
memorydc.CreateCompatibleDC(pdeskdc);
//选中画笔
CBitmap *pold = memorydc.SelectObject(&bmp);
//绘制图像
memorydc.BitBlt(0,0,re.Width() ,re.Height(), pdeskdc , 0 ,0 ,SRCCOPY) ;
//获取鼠标位置,然后添加鼠标图像
CPoint po;
GetCursorPos(&po);
HICON hinco = (HICON)GetCursor();
memorydc.DrawIcon(po.x-10 , po.y - 10 , hinco);
//选中原来的画笔
memorydc.SelectObject(pold);
BITMAP bit;
bmp.GetBitmap(&bit);
// DWORD size = bit.bmWidth * bit.bmHeight ;
//定义 图像大小(单位:byte)
DWORD size = bit.bmWidthBytes * bit.bmHeight ;
LPSTR lpdata = (LPSTR)GlobalAlloc(GPTR , size) ;
//后面是创建一个bmp文件的必须文件头,想要了解可以参考msdn
BITMAPINFOHEADER pbitinfo;
pbitinfo.biBitCount = 24 ;
pbitinfo.biClrImportant = 0;
pbitinfo.biCompression = BI_RGB ;
pbitinfo.biHeight = bit.bmHeight ;
pbitinfo.biPlanes = 1 ;
pbitinfo.biSize = sizeof(BITMAPINFOHEADER);
pbitinfo.biSizeImage =size;
pbitinfo.biWidth = bit.bmWidth;
pbitinfo.biXPelsPerMeter = 0;
pbitinfo.biYPelsPerMeter = 0 ;
GetDIBits(pdeskdc->m_hDC , bmp , 0 , pbitinfo.biHeight , lpdata ,
(BITMAPINFO*)&pbitinfo,DIB_RGB_COLORS);
BITMAPFILEHEADER bfh;
bfh.bfReserved1 = bfh.bfReserved2 = 0 ;
bfh.bfType = ((WORD)('M'<< 8)|'B');
bfh.bfSize = 54 + size ;
bfh.bfOffBits = 54 ;
//写入文件
CFile file;
if ( file.Open("1.bmp" , CFile::modeCreate|CFile::modeWrite) )
{
file.WriteHuge( &bfh , sizeof(BITMAPFILEHEADER) );
file.WriteHuge(&pbitinfo , sizeof(BITMAPINFOHEADER));
file.WriteHuge(lpdata , size);
file.Close();
}
GlobalFree(lpdata);</strong>
相关文章推荐
- c++截取屏幕图片并保存(函数代码实现)
- c++截取屏幕图片并保存(函数代码实现)
- iOS中截取当前屏幕,并保存图片的代码例子
- iOS中截取当前屏幕,并保存图片的代码例子
- Android:实现截取当前屏幕图片并保存至SDCard
- 【Android】Android实现截取当前屏幕图片并保存至SDCard
- Java实现电脑屏幕的截取并保存成图片
- c++ 截取屏幕图片并保存
- 纯C++代码实现将像素矩阵保存为bmp图片
- java实现截取屏幕保存为图片
- AndEngine实现屏幕截取和图片保存
- 【Android】Android实现截取当前屏幕图片并保存至SDCard
- 获取和保存当前屏幕的截图 实现的C++代码如下
- 多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
- 基于visual c++之windows核心编程代码分析(40)实现屏幕截取
- 基于visual c++之windows核心编程代码分析(40)实现屏幕截取
- 基于visual c++之windows核心编程代码分析(40)实现屏幕截取
- 编写一个函数,实现把C/C++程序代码中的注释去掉,并把结果返回。
- java通过代理获取网络图片,截取当前屏幕保存为图片
- Windows Phone 7 截取当前屏幕保存图像的代码