将屏幕保存为图片。使用vs2008编译通过。

  1. #include "stdafx.h"
  2. #include <windows.h>
  3. #include <atlimage.h>
  4. int __stdcall WinMain(
  5. HINSTANCE hInstance,
  6. HINSTANCE hPrevInstance,
  7. LPSTR lpCmdLine,
  8. int nShowCmd)
  9. {
  10. HWND hwnd = ::GetDesktopWindow();
  11. HDC hDC = ::GetDC(hwnd);//获取屏幕DC
  12. RECT rect;
  13. ::GetClientRect(hwnd, &rect);//获取屏幕大小
  14. HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC
  15. HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right, rect.bottom);//创建兼容位图
  16. HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC。并保存返回值
  17. ::BitBlt(hDCMem, 0, 0, rect.right, rect.bottom, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象拷贝到内存DC中
  18. CImage image;
  19. image.Attach(hBitMap);
  20. image.Save(_T("c://B.jpg"));//假设文件后缀为.bmp,则保存为为bmp格式
  21. image.Detach();
  22. ::SelectObject(hDCMem, hOldMap);//选入上次的返回值
  23. //释放
  24. ::DeleteObject(hBitMap);
  25. ::DeleteDC(hDCMem);
  26. ::DeleteDC(hDC);
  27. return 0;
  28. }

将当前MFC程序(这里是单文档程序)保存为图片。使用vs2005。

第一个使用CImage类保存图片。第二个使用BITMAPINFO。

第一个:

  1. void CMainFrame::OnGetMap()
  2. {
  3. HWND hwnd = this->GetSafeHwnd();
  4. HDC hDC = ::GetWindowDC(hwnd);//获取DC
  5. RECT rect;
  6. ::GetWindowRect(hwnd, &rect);//获取屏幕大小
  7. HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC
  8. HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right-rect.left, rect.bottom-rect.top);//创建兼容位图
  9. HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值
  10. ::BitBlt(hDCMem, 0, 0, rect.right-rect.left, rect.bottom-rect.top, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象拷贝到内存DC中
  11. CImage image;//须要#include <atlimage.h>
  12. image.Attach(hBitMap);
  13. image.Save(_T("c://B.jpg"));//假设文件后缀为.bmp,则保存为为bmp格式
  14. image.Detach();
  15. ::SelectObject(hDCMem, hOldMap);//选入上次的返回值
  16. //释放
  17. ::DeleteObject(hBitMap);
  18. ::DeleteDC(hDCMem);
  19. ::DeleteDC(hDC);
  20. }

第二个:

  1. void CMainFrame::OnGetMap()
  2. {
  3. CDC* pDC = GetWindowDC();
  4. CBitmap bitmap;
  5. CDC memDC ;
  6. CRect rect;
  7. GetWindowRect(rect);
  8. memDC.CreateCompatibleDC(pDC);
  9. bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
  10. memDC.SelectObject(&bitmap);
  11. memDC.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY);
  12. CFileDialog fDlg(FALSE,_T("bmp"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("位图文件|*.bmp"),this);
  13. if (fDlg.DoModal()==IDOK)
  14. {
  15. CString bmpfile = fDlg.GetPathName();
  16. CFile file(bmpfile,CFile::modeCreate|CFile::modeWrite);
  17. BITMAP bInfo;
  18. bitmap.GetBitmap(&bInfo);
  19. //计算调色板大小
  20. int panelsize = 0;
  21. if (bInfo.bmBitsPixel<24) //非真彩色
  22. {
  23. panelsize = pow((double)2,bInfo.bmBitsPixel)*sizeof(RGBQUAD);
  24. }
  25. //定义位图信息
  26. BITMAPINFO*  bMapInfo = (BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize);
  27. bMapInfo->bmiHeader.biBitCount = bInfo.bmBitsPixel;
  28. bMapInfo->bmiHeader.biClrImportant = 0;
  29. bMapInfo->bmiHeader.biCompression = 0;
  30. bMapInfo->bmiHeader.biHeight = bInfo.bmHeight;
  31. bMapInfo->bmiHeader.biPlanes = bInfo.bmPlanes;
  32. bMapInfo->bmiHeader.biSize = sizeof(BITMAPINFO);
  33. bMapInfo->bmiHeader.biSizeImage = bInfo.bmHeight*bInfo.bmWidthBytes;
  34. bMapInfo->bmiHeader.biWidth = bInfo.bmWidth;
  35. bMapInfo->bmiHeader.biXPelsPerMeter = 0;
  36. bMapInfo->bmiHeader.biYPelsPerMeter = 0;
  37. //获取位图的实际数据
  38. char* pData = new char[bMapInfo->bmiHeader.biSizeImage];
  39. int len = GetDIBits(pDC->m_hDC,bitmap,0,bInfo.bmHeight,pData,bMapInfo,DIB_RGB_COLORS);
  40. BITMAPFILEHEADER bFileHeader;
  41. bFileHeader.bfType = 0x4D42;
  42. bFileHeader.bfReserved1 = 0;
  43. bFileHeader.bfReserved2 = 0;
  44. bFileHeader.bfSize = sizeof(BITMAPFILEHEADER);
  45. bFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+panelsize;
  46. //向文件里写入位图数据
  47. file.Write(&bFileHeader,sizeof(BITMAPFILEHEADER));
  48. file.Write(&bMapInfo->bmiHeader,sizeof(BITMAPINFOHEADER));
  49. file.Write(pData,bMapInfo->bmiHeader.biSizeImage+panelsize);
  50. file.Close();
  51. delete pData;
  52. LocalFree(bMapInfo);
  53. }
  54. bitmap.DeleteObject();
  55. memDC.DeleteDC();
  56. }

版权声明:本文博主原创文章,博客,未经同意,不得转载。

保存画面为图片 当前MFC保存该程序为图片 c++ vc的更多相关文章

  1. python 从视频中提取图片,并保存在硬盘上

    使用python的moviepy库来提取视频中的图片,按照视频每帧一个图片的方式来保存. extract images from video, than save them to disk from ...

  2. h5页面转图片长按保存

    5页面经常会遇到此类需求.将最后的结果页转换为图片长按保存.下面介绍一下实现此需求的过程 1,依赖安装 cnpm install html2canvas --save 2,依赖引入,使用 绑定 初始化 ...

  3. C# winform 窗体应用程序之图片上传Oracle数据库保存字段BLOB

    C# winform 窗体应用程序之图片上传Oracle数据库保存字段BLOB 我用的数据库是Oracle,就目前来看,许多数据库现在都倾向于Oracle数据库,对ORACLE数据库基本的操作也是必须 ...

  4. SpringMVC上传文件(图片)并保存到本地

    SpringMVC上传文件(图片)并保存到本地 小记一波~ 基本的MVC配置就不展示了,这里给出核心代码 在spring-mvc的配置文件中写入如下配置 <bean id="multi ...

  5. html 移动端关于长按图片弹出保存问题

    在做html5项目的时候有个需求是要拖动一个图片,但是又不要用户长时间按着弹出保存框.首先想到的就是在点图片的时候阻止默认事件的发生: js停止冒泡· function myfn(e){ window ...

  6. 7. 进行图片的数据补全和增强(随机亮度,随机饱和度,随机翻转) Image.open(进行图片的读入) 2.ImageEnhance.Brightness(亮度变化) 3.ImageEnhance.Contrast(饱和度变化) 4.enhance_image.transpose(图片随机翻转) 5.enhance_image.save(进行图片保存)

    1.Image.open(image_path)  进行图片的打开 参数说明:image_path 表示图片的路径 2. ImageEnhance.Brightness(image)  # 进行图片的 ...

  7. 生成二维码,并且保存,指定位置的view成图片,并且保存到本地相册

    效果图: 保存的图片效果是: 保存到本地的,是整个视图,不只是单单的二维码的图片, 在了解的一番过程之后,我知道了, 1.首先要去获取保存图片的写入权限:(使用 https://github.com/ ...

  8. PHP抓取远程图片到本地保存(如何把错误信息用text文件写入)

    最近在工作中需要开发了一个用户素材功能,里面需要将网上的各种图片素材进行本地化存储.于是在网上找了一些相关资料,并根据自身开发需要,整理了一下主要的逻辑代码. /** * PHP将网页上的图片攫取到本 ...

  9. 什么是Nib文件?(Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口)

    Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口.Nib文件是Interface Builder文档.通常您会使用Interface Builder ...

随机推荐

  1. [Yarn] Use Yarn to Create an Alternative Import Name of an Installed Library

    In this lesson we'll show how to use yarn to alias the names of same npm libraries but install diffe ...

  2. 使用ganglia监控hadoop及hbase集群 分类: B3_LINUX 2015-03-06 20:53 646人阅读 评论(0) 收藏

    介绍性内容来自:http://www.uml.org.cn/sjjm/201305171.asp 一.Ganglia简介 Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测 ...

  3. HDU 1010 Tempter of the Bone (ZOJ 2110) DFS+剪枝

    传送门: HDU:http://acm.hdu.edu.cn/showproblem.php?pid=1010 ZOJ:http://acm.zju.edu.cn/onlinejudge/showPr ...

  4. C++学习笔记8-操作符&amp;指针

    1.  重载操作符 赋值操作符的返回类型应该与内置类型赋值运算返回的类型同样.内置类型的赋值运算返回对右操作数的引用,因此,赋值操作符也返回对同一类类型的引用.比如.Sales_item的赋值操作符能 ...

  5. ios开发零散知识点总结

    1:当有导航栏的时候,子视图为UIScrollView,或是继承于UIScrollView的控件如UITableView,UICollectionView等,控制器会自动调用 self.automat ...

  6. php 中英文字符串截取,字符串长度

    在做PHP开发的时候,由于我国的语言环境问题,所以我们常常需要对中文进行处理.在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数 ...

  7. 程序猿的还有一出路:大数据project师

    非常多年前我非常郁闷地写了一篇博客<程序猿的出路在哪里?>,之所以郁闷.我记得是看了中国男足的比赛,不由自主对照自已苦逼的程序猿生涯,以前对中国软件的感情有如对中国男足,绝望到没有不论什么 ...

  8. target属性值

    有 4 个保留的目标名称用作特殊的文档重定向操作: _blank 浏览器总在一个新打开.未命名的窗体中加载目标文档. _self 这个目标的值对全部没有指定目标的 <a> 标签是默认目标, ...

  9. PatentTips - Well bias control circuit

    BACKGROUND OF THE INVENTION The present invention relates to a semiconductor integrated circuit devi ...

  10. [Postgres] Create a Postgres Table

    Learn how to create a table using the most widely-used data types (serial, varchar, integer, float, ...