c++ 截取屏幕图片并保存
2012-09-19 10:37:11 来源:WEB开发网核心提示: 屏幕捕捉技术第一步就是抓取屏幕的桌面虽然print screen键可以,但是在实际中就有点不适用了下面的代码可以拷贝到一个函数里面,c++ 截取屏幕图片并保存,执行就可以生成一个获取屏幕的bmp文件了//获取桌面窗口的CDCCDC *pdeskdc = GetDesktopWindow()->GetDC();
屏幕捕捉技术第一步就是抓取屏幕的桌面
虽然print screen键可以,但是在实际中就有点不适用了
下面的代码可以拷贝到一个函数里面,执行就可以生成一个获取屏幕的bmp文件了
//获取桌面窗口的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);
更多精彩
赞助商链接