[MFC编程]三谈屏幕截图--关于图像的保存

我自己的技术还没到家,所以只讲怎么保存成bmp格式的位图文件。

一开始的时候我陷在整个屏幕截图的泥潭中,保存的图像总有好大一部分黑边。后来终于想

明白了。你想截取哪个窗口的图像,就找到那个窗口的DC (设备上下文),然后创建与之

兼容的DC,和与之大小的兼容位图,将DC复制到兼容的DC中,保存起来。陷在我想保存客

户区内的图像,那我就找到客户区的DC,然后将之整个的保存起来。

详细代码如下:

//拷贝客户区的DC内容到兼容DC

///

CDC *pDC=GetDC();
 CRect rect;
 GetClientRect(&rect);
 CDC bmemDC;
 bmemDC.CreateCompatibleDC(pDC);
 CBitmap bmprect;
 bmprect.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
 bmemDC.SelectObject(&bmprect);

 bmemDC.BitBlt(0,0,mbitmap.bmWidth,mbitmap.bmHeight,pDC,0,0,SRCCOPY);

/

//将位图信息填充到一个缓冲区内


 BITMAP mbitmap;
 bmprect.GetBitmap(&mbitmap);
 BITMAPINFOHEADER bih = {0};//位图信息头
 bih.biBitCount = mbitmap.bmBitsPixel;//每个像素字节大小
 bih.biCompression = BI_RGB;
 bih.biHeight = mbitmap.bmHeight;//高度
 bih.biPlanes = 1;
 bih.biSize = sizeof(BITMAPINFOHEADER);
 bih.biSizeImage = mbitmap.bmWidthBytes * mbitmap.bmHeight;//图像数据大小
 bih.biWidth = mbitmap.bmWidth;//宽度
 
 BITMAPFILEHEADER bfh = {0};//位图文件头
 bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位图数据的偏移量
 bfh.bfSize = bfh.bfOffBits + mbitmap.bmWidthBytes * mbitmap.bmHeight;//文件总的大小
 bfh.bfType = (WORD)0x4d42;
 byte * p = new byte[mbitmap.bmWidthBytes * mbitmap.bmHeight];//申请内存保存位图数据
 GetDIBits(bmemDC.m_hDC, (HBITMAP) bmprect.m_hObject, 0, rect.Height(), p,
  (LPBITMAPINFO) &bih, DIB_RGB_COLORS);//获取位图数据
  ///

//文件保存对话框,保存文件

//
 CString strFileName,strszFilter;
 strszFilter="位图文件(*.bmp)|*.bmp|全部文件(*.*)|*.*||";
 CFileDialog bmpdlg(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strszFilter,NULL);
 if(IDOK == bmpdlg.DoModal())
 {
  strFileName = bmpdlg.GetFileName();
  strFileName +=".bmp";
  char filename[MAX_PATH];
  strcpy(filename,strFileName);
  FILE *fp = fopen(filename, "w+b");
  fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);//写入位图文件头 
  fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp);//写入位图信息头
  fwrite(p, 1, mbitmap.bmWidthBytes * mbitmap.bmHeight, fp);//写入位图数据
  fclose(fp);
 }
  delete [] p;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值