保存画面为图片 当前MFC保存该程序为图片 c++ vc

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

[cpp] view
plain
copy

  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。

第一个:

[cpp] view
plain
copy

  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. }

第二个:

[cpp] view
plain
copy

  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. }

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

时间: 2024-12-05 01:55:25

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

ASP.NET下载远程图片保存到本地的方法、保存抓取远程图片

ASP.NET下载远程图片保存到本地的方法.保存抓取远程图片 2012-05-16 11:25:51     我来说两句      收藏    我要投稿 以下介绍两种方法:1.利用WebRequest,WebResponse 类WebRequest wreq=WebRequest.Create("http://up.2cto.com/2012/0516/20120516112717995.gif");    HttpWebResponse wresp=(HttpWebResponse)

把文本以图片的形式保存

private void ToConvert_Click(object sender, EventArgs e) { string strPath = System.Windows.Forms.Application.StartupPath; ConvertTextFileToImage(strPath + @"\文件\aa.txt", strPath + @"\文件\SSS.png"); pictureBox1.Image = Image.FromFile(str

C++MFC编程笔记day07 MFC单文档绘图保存、多文档绘图保存

完善绘图例子(day06中的),加上保存功能 1 设计和编写图形类 CShape 1.1 成员变量 CPoint m_ptBegin; CPoint m_ptEnd; UINT m_nType; 1.2 支持序列化 1.2.1 继承自CObject 1.2.2 添加序列化的声明宏和实现宏 1.2.3 重写虚函数Serilize(),在函数中,完成成员变量的序列化 2 由于保存多个图形,引入MFC的集合类CObArray,保存的是CObject 对象的地址. 3 图形数据需要保存到文档类中,在该类

Python爬虫获取图片并下载保存至本地的实例

今天小编就为大家分享一篇Python爬虫获取图片并下载保存在本地的实例,具有很好的参考价值,希望对大家有所帮助.一起来看看吧! 1.抓取煎蛋网上的图片 2.代码如下 * * * import urllib.request import os def url_open(url): req=urllib.request.Request(url) req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Geck

h5页面转图片长按保存

5页面经常会遇到此类需求.将最后的结果页转换为图片长按保存.下面介绍一下实现此需求的过程 1,依赖安装 cnpm install html2canvas --save 2,依赖引入,使用 绑定 初始化 由此,页面转换为图片完成 原文地址:https://www.cnblogs.com/shmily-code/p/9667151.html

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

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

C# System.Drawing.Graphics 画图后,如何保存一个低质量的图片,一个占用空间较小的图片

首先要控制图片保存后硬盘后的大小(即占用硬盘的空间,而非尺寸),真正要处理的是控制 System.Drawing.Bitmap.Save 方法的参数. 具体实现如下: private void ThumbPicture(Image SourceImage, int TargetWidth,string savePath) { int IntWidth; //新的图片宽 int IntHeight; //新的图片高 try { int TargetHeight = (int)Math.Round(

PHP抓取远程图片到本地保存

最近在工作中需要开发了一个用户素材功能,里面需要将网上的各种图片素材进行本地化存储.于是在网上找了一些相关资料,并根据自身开发需要,整理了一下主要的逻辑代码. /** * PHP将网页上的图片攫取到本地存储 * @param $imgUrl 图片url地址 * @param string $saveDir 本地存储路径 默认存储在当前路径 * @param null $fileName 图片存储到本地的文件名 * @return mix */ function crabImage($imgUrl

OpenCV:基于MFC的视频播放器和图片读取器

实例工程包下载[OpenCV:基于MFC的视频播放器和图片读取器] 一.实现的功能 1.打开本地视频进行读取.播放.暂停.停止控制 2.图片打开功能分为两种:可使用"打开图片"按钮打开本地图片,或者点击comobox里面设定的图片列表选择并显示图片 二.编译环境 OS:Win8.1 x64 IDE:  Visual Studio 2013 OpenCV: 2.4.8 三.主要思路 1.视频的滑动条控制: ①主窗体的OnHScroll()响应函数负责响应slider滑动条的变化,这样就轻