1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 截取屏幕并保存为BMP文件

截取屏幕并保存为BMP文件

时间:2024-03-19 15:59:33

相关推荐

截取屏幕并保存为BMP文件

CDC *pDC;//屏幕DCpDC = CDC::FromHandle( ::GetDC(NULL) );//获取当前整个屏幕DCint BitPerPixel = pDC->GetDeviceCaps( BITSPIXEL );//获得颜色模式int Width = pDC->GetDeviceCaps( HORZRES );int Height = pDC->GetDeviceCaps( VERTRES );//复制屏幕 CDC memDC;memDC.CreateCompatibleDC( pDC );CBitmap memBitmap, *oldmemBitmap;memBitmap.CreateCompatibleBitmap( pDC, Width, Height);oldmemBitmap = memDC.SelectObject( &memBitmap );//将memBitmap选入内存DCmemDC.BitBlt( 0, 0, Width, Height, pDC, 0, 0, SRCCOPY);//复制屏幕图像到内存DC//保存为bmp文件 BITMAP bmp;memBitmap.GetBitmap( &bmp );//获得位图信息FILE *fp = fopen( "c:\\1.bmp", "w+b");BITMAPFILEHEADER bfh = {0};//位图文件头bfh.bfOffBits = sizeof( BITMAPFILEHEADER) + sizeof( BITMAPINFOHEADER );//到位图数据的偏移量bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;//文件总的大小bfh.bfType = (WORD)0x4d42;BITMAPINFOHEADER bih = {0};//位图信息头bih.biBitCount = bmp.bmBitsPixel;//每个像素字节大小bih.biCompression = BI_RGB;bih.biHeight = bmp.bmHeight;bih.biWidth = bmp.bmWidth;bih.biPlanes = 1;bih.biSize = sizeof( BITMAPINFOHEADER);bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;//图像数据大小fwrite( &bfh, 1, sizeof(BITMAPFILEHEADER), fp);//写入位图文件头fwrite( &bih, 1, sizeof(BITMAPINFOHEADER), fp);//写入位图信息头byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];//申请内存保存位图数据GetDIBits( memDC.m_hDC, (HBITMAP)memBitmap.m_hObject, 0, Height, p,(LPBITMAPINFO)&bih, DIB_RGB_COLORS);//获取位图数据fwrite( p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp);//写入位图数据//垃圾处理 delete [] p;fclose(fp);memDC.SelectObject( oldmemBitmap );

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。