当前位置:编程学习 > C/C++ >>

c++ 截取屏幕图片并保存

屏幕捕捉技术第一步就是抓取屏幕的桌面
虽然print screen键可以,但是在实际中就有点不适用了
下面的代码可以拷贝到一个函数里面,执行就可以生成一个获取屏幕的bmp文件了
 
[cpp] 
//获取桌面窗口的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); 

 
 
 
 
 
 
 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,