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

来源:互联网 发布:知势而后可以加兵的加 编辑:程序博客网 时间:2024/04/30 13:07

屏幕捕捉技术第一步就是抓取屏幕的桌面

虽然print screen键可以,但是在实际中就有点不适用了

下面的代码可以拷贝到一个函数里面,执行就可以生成一个获取屏幕的bmp文件了

 

//获取桌面窗口的CDCCDC *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文件的必须文件头,想要了解可以参考msdnBITMAPINFOHEADER 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);


 

 

 

 

 

 

 

 

原创粉丝点击