资源描述:
《VC将指定区域保存为图片》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.HBITMAPCopyScreenToBitmap(LPRECTlpRect);//将屏幕指定区域存成图片HBITMAPCopyScreenToBitmap(LPRECTlpRect)//lpRect代表选定区域{HDChScrDC,hMemDC;//屏幕和内存设备描述表HBITMAPhBitmap,hOldBitmap;//位图句柄intnX,nY,nX2,nY2;//选定区域坐标intnWidth,nHeight;//位图宽度和高度intxScrn,yScrn;//屏幕分辨率//确保选定区域不为空矩形if(IsRectEmpty(lpRect))returnNUL
2、L;//为屏幕创建设备描述表hScrDC=CreateDC(_T("DISPLAY"),NULL,NULL,NULL);//为屏幕设备描述表创建兼容的内存设备描述表hMemDC=CreateCompatibleDC(hScrDC);//获得选定区域坐标nX=lpRect->left;nY=lpRect->top;nX2=lpRect->right;nY2=lpRect->bottom;//获得屏幕分辨率xScrn=GetDeviceCaps(hScrDC,HORZRES);yScrn=GetDeviceCaps(hScrDC,VERTRES);//确保选定区域是可见的if
3、(nX<0)nX=0;if(nY<0)nY=0;if(nX2>xScrn)nX2=xScrn;if(nY2>yScrn)nY2=yScrn;nWidth=nX2-nX;nHeight=nY2-nY;//创建一个与屏幕设备描述表兼容的位图hBitmap=CreateCompatibleBitmap(hScrDC,nWidth,nHeight);//把新位图选到内存设备描述表中hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap);//把屏幕设备描述表拷贝到内存设备描述表中BitBlt(hMemDC,0,0,nWidth,nHeigh
4、t,hScrDC,nX,nY,SRCCOPY);//得到屏幕位图的句柄hBitmap=(HBITMAP)SelectObject(hMemDC,hOldBitmap);//清除DeleteDC(hScrDC);DeleteDC(hMemDC);//返回位图句柄returnhBitmap;}2.HBITMAPGetSrcBit(HDChDC,LPRECTrEct)//设置一个成员变量m_hBitmap,在OnDraw或者OnPaint中调用,从内存中首先获得它,而不像第一个函数那样,临时去截屏幕,因为如果突然在截图的瞬间最小化了窗口,那么函数1截取的范围就不是我们所需要的了
5、。HBITMAPGetSrcBit(HDChDC,LPRECTrEct){HDChBufDC;HBITMAPhBitmap,hBitTemp;//创建设备上下文(HDC)hBufDC=CreateCompatibleDC(hDC);//创建HBITMAPhBitmap=CreateCompatibleBitmap(hDC,abs(rEct->right-rEct->left),abs(rEct->bottom-rEct->top));hBitTemp=(HBITMAP)SelectObject(hBufDC,hBitmap);//得到位图缓冲区StretchBlt(hBu
6、fDC,0,0,abs(rEct->right-rEct->left),abs(rEct->bottom-rEct->top),hDC,rEct->left,rEct->top,abs(rEct->right-rEct->left),abs(rEct->bottom-rEct->top),SRCCOPY);//得到最终的位图信息hBitmap=(HBITMAP)SelectObject(hBufDC,hBitTemp);//释放内存DeleteObject(hBitTemp);::DeleteDC(hBufDC);returnhBitmap;}3.boolSaveBMPT
7、oFile(HBITMAPhBitmap,LPSTRlpFileName);//将图片存成bmp文件boolSaveBMPToFile(HBITMAPhBitmap,LPSTRlpFileName)//hBitmap为刚才的屏幕位图句柄,lpFileName为位图文件名{HDChDC;//设备描述表intiBits;//当前显示分辨率下每个像素所占字节数WORDwBitCount;//位图中每个像素所占字节数//定义调色板大小,位图中像素字节大小,位图文件大小,写入文件字节数DWORDdwPaletteSize=0,dwBmB