全屏抓图,依次保存.bmp,MFC

void COnePicDlg::GetOnePicture() { CDC *pDC;//屏幕DC pDC = CDC::FromHandle(::GetDC(NULL));//获取当前整个屏幕DC int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);//获得颜色模式 int Width = pDC->GetDeviceCaps(HORZRES); int Height = pDC->GetDeviceCaps(VERTRES); //获取整个屏幕的属性 CString str, strBitPerPixel, strWidth, strHeight; strBitPerPixel.Format("%d", BitPerPixel); strWidth.Format("%d", Width); strHeight.Format("%d", Height); str = "当前屏幕色彩模式为" + strBitPerPixel + "位色彩" + '/n' + "屏幕宽度:" + strWidth + '/n' + "屏幕高度:" + strHeight; //AfxMessageBox(str); CDC memDC;//内存DC memDC.CreateCompatibleDC(pDC); CBitmap memBitmap, *oldmemBitmap;//建立和屏幕兼容的bitmap memBitmap.CreateCompatibleBitmap(pDC, Width, Height); oldmemBitmap = memDC.SelectObject(&memBitmap);//将memBitmap选入内存DC memDC.BitBlt(0, 0, Width, Height, pDC, 0, 0, SRCCOPY);//复制屏幕图像到内存DC //以下代码保存memDC中的位图到文件 BITMAP bmp; memBitmap.GetBitmap(&bmp);//获得位图信息 int picNum; CString filename; FILE *fp; picNum = 0; do {//防止保存图像重名,依次扫描直到无重名;假设2pic.bmp存在3pic.bmp不存在,则此次保存为3pic.bmp picNum++; filename.Format("%d", picNum); filename+="pic.bmp"; fp=fopen(filename, "r"); //AfxMessageBox(filename); }while( (fp!=NULL)&&(picNum>=0)&&(picNum<=100)); fp = fopen(filename, "w+b");//将位图保存为.bmp文件 BITMAPINFOHEADER bih = {0};//位图信息头 bih.biBitCount = bmp.bmBitsPixel;//每个像素字节大小 bih.biCompression = BI_RGB; bih.biHeight = bmp.bmHeight;//高度 bih.biPlanes = 1; bih.biSize = sizeof(BITMAPINFOHEADER); bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;//图像数据大小 bih.biWidth = bmp.bmWidth;//宽度 BITMAPFILEHEADER bfh = {0};//位图文件头 bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位图数据的偏移量 bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;//文件总的大小 bfh.bfType = (WORD)0x4d42; 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); //至此,图像保存完毕 }

你可能感兴趣的:(null,delete,mfc,byte,FP,colors)