欢迎来到天天文库
浏览记录
ID:20872887
大小:36.50 KB
页数:3页
时间:2018-10-17
《一个屏幕捕捉的例子》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一个屏幕捕捉的例子自己做的一个屏幕捕捉的软件,可以捕捉全屏、窗口和子窗口,可以保存到文件中。程序的主要的代码如下: 根据位图的句柄将位图写入文件:voidCPage1::WriteBmpToFile(HBITMAPhBitmap){ HDChDC=::CreateDC("DISPLAY",NULL,NULL,NULL); intiBits=::GetDeviceCaps(hDC,BITSPIXEL)*::GetDeviceCaps(hDC,PLANES);//当前分辨率下每个像素所占字节数 ::DeleteDC(hDC); WORD wBitCount;
2、 //位图中每个像素所占字节数 if(iBits<=1) wBitCount=1; elseif(iBits<=4) wBitCount=4; elseif(iBits<=8) wBitCount=8; elseif(iBits<=24) wBitCount=24; else wBitCount=iBits; DWORD dwPaletteSize=0; //调色板大小,位图中像素字节大小 if(wBitCount<=8) dwPaletteSize=(1<3、 BITMAP bm; //位图属性结构 ::GetObject(hBitmap,sizeof(bm),(LPSTR)&bm); BITMAPINFOHEADER bi; //位图信息头结构 bi.biSize =sizeof(BITMAPINFOHEADER); bi.biWidth =bm.bmWidth; bi.biHeight =bm.bmHeight; bi.biPlanes =1; bi.biBitCount =wBitCo4、unt; bi.biCompression =BI_RGB;//BI_RGB表示位图没有压缩 bi.biSizeImage =0; bi.biXPelsPerMeter =0; bi.biYPelsPerMeter =0; bi.biClrUsed =0; bi.biClrImportant =0; DWORDdwBmBitsSize=((bm.bmWidth*wBitCount+31)/32)*4*bm.bmHeight; HANDLEhDib =::GlobalAlloc(GHND,dwBmBit5、sSize+dwPaletteSize+sizeof(BITMAPINFOHEADER)); //为位图内容分配内存 LPBITMAPINFOHEADERlpbi=(LPBITMAPINFOHEADER)GlobalLock(hDib); *lpbi=bi; HANDLEhPal=::GetStockObject(DEFAULT_PALETTE); //处理调色板 HANDLE hOldPal=NULL; if(hPal) { hDC=::GetDC(NULL); hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FAL6、SE); RealizePalette(hDC); } ::GetDIBits(hDC,hBitmap,0,(UINT)bm.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize,(BITMAPINFO*)lpbi,DIB_RGB_COLORS);//获取该调色板下新的像素值 if(hOldPal)//恢复调色板 { SelectPalette(hDC,(HPALETTE)hOldPal,TRUE); RealizePalette(hDC); ::ReleaseDC(NULL,hDC); 7、 } BITMAPFILEHEADER bmfHdr;//位图文件头结构 bmfHdr.bfType=0x4D42; //"BM" //设置位图文件头 DWORDdwDIBSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize; bmfHdr.bfSize=dwDIBSize; bmfHdr.bfReserved1=0; bmfHdr.bfReserved2=0;
3、 BITMAP bm; //位图属性结构 ::GetObject(hBitmap,sizeof(bm),(LPSTR)&bm); BITMAPINFOHEADER bi; //位图信息头结构 bi.biSize =sizeof(BITMAPINFOHEADER); bi.biWidth =bm.bmWidth; bi.biHeight =bm.bmHeight; bi.biPlanes =1; bi.biBitCount =wBitCo
4、unt; bi.biCompression =BI_RGB;//BI_RGB表示位图没有压缩 bi.biSizeImage =0; bi.biXPelsPerMeter =0; bi.biYPelsPerMeter =0; bi.biClrUsed =0; bi.biClrImportant =0; DWORDdwBmBitsSize=((bm.bmWidth*wBitCount+31)/32)*4*bm.bmHeight; HANDLEhDib =::GlobalAlloc(GHND,dwBmBit
5、sSize+dwPaletteSize+sizeof(BITMAPINFOHEADER)); //为位图内容分配内存 LPBITMAPINFOHEADERlpbi=(LPBITMAPINFOHEADER)GlobalLock(hDib); *lpbi=bi; HANDLEhPal=::GetStockObject(DEFAULT_PALETTE); //处理调色板 HANDLE hOldPal=NULL; if(hPal) { hDC=::GetDC(NULL); hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FAL
6、SE); RealizePalette(hDC); } ::GetDIBits(hDC,hBitmap,0,(UINT)bm.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize,(BITMAPINFO*)lpbi,DIB_RGB_COLORS);//获取该调色板下新的像素值 if(hOldPal)//恢复调色板 { SelectPalette(hDC,(HPALETTE)hOldPal,TRUE); RealizePalette(hDC); ::ReleaseDC(NULL,hDC);
7、 } BITMAPFILEHEADER bmfHdr;//位图文件头结构 bmfHdr.bfType=0x4D42; //"BM" //设置位图文件头 DWORDdwDIBSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize; bmfHdr.bfSize=dwDIBSize; bmfHdr.bfReserved1=0; bmfHdr.bfReserved2=0;
此文档下载收益归作者所有