保存画面为图片 当前MFC保存该程序为图片 c++ vc
将屏幕保存为图片。使用vs2008编译通过。
- #include "stdafx.h"
- #include <windows.h>
- #include <atlimage.h>
- int __stdcall WinMain(
- HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nShowCmd)
- {
- HWND hwnd = ::GetDesktopWindow();
- HDC hDC = ::GetDC(hwnd);//获取屏幕DC
- RECT rect;
- ::GetClientRect(hwnd, &rect);//获取屏幕大小
- HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC
- HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right, rect.bottom);//创建兼容位图
- HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC。并保存返回值
- ::BitBlt(hDCMem, 0, 0, rect.right, rect.bottom, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象拷贝到内存DC中
- CImage image;
- image.Attach(hBitMap);
- image.Save(_T("c://B.jpg"));//假设文件后缀为.bmp,则保存为为bmp格式
- image.Detach();
- ::SelectObject(hDCMem, hOldMap);//选入上次的返回值
- //释放
- ::DeleteObject(hBitMap);
- ::DeleteDC(hDCMem);
- ::DeleteDC(hDC);
- return 0;
- }
将当前MFC程序(这里是单文档程序)保存为图片。使用vs2005。
第一个使用CImage类保存图片。第二个使用BITMAPINFO。
第一个:
- void CMainFrame::OnGetMap()
- {
- HWND hwnd = this->GetSafeHwnd();
- HDC hDC = ::GetWindowDC(hwnd);//获取DC
- RECT rect;
- ::GetWindowRect(hwnd, &rect);//获取屏幕大小
- HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC
- HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right-rect.left, rect.bottom-rect.top);//创建兼容位图
- HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值
- ::BitBlt(hDCMem, 0, 0, rect.right-rect.left, rect.bottom-rect.top, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象拷贝到内存DC中
- CImage image;//须要#include <atlimage.h>
- image.Attach(hBitMap);
- image.Save(_T("c://B.jpg"));//假设文件后缀为.bmp,则保存为为bmp格式
- image.Detach();
- ::SelectObject(hDCMem, hOldMap);//选入上次的返回值
- //释放
- ::DeleteObject(hBitMap);
- ::DeleteDC(hDCMem);
- ::DeleteDC(hDC);
- }
第二个:
- void CMainFrame::OnGetMap()
- {
- CDC* pDC = GetWindowDC();
- CBitmap bitmap;
- CDC memDC ;
- CRect rect;
- GetWindowRect(rect);
- memDC.CreateCompatibleDC(pDC);
- bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
- memDC.SelectObject(&bitmap);
- memDC.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY);
- CFileDialog fDlg(FALSE,_T("bmp"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("位图文件|*.bmp"),this);
- if (fDlg.DoModal()==IDOK)
- {
- CString bmpfile = fDlg.GetPathName();
- CFile file(bmpfile,CFile::modeCreate|CFile::modeWrite);
- BITMAP bInfo;
- bitmap.GetBitmap(&bInfo);
- //计算调色板大小
- int panelsize = 0;
- if (bInfo.bmBitsPixel<24) //非真彩色
- {
- panelsize = pow((double)2,bInfo.bmBitsPixel)*sizeof(RGBQUAD);
- }
- //定义位图信息
- BITMAPINFO* bMapInfo = (BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize);
- bMapInfo->bmiHeader.biBitCount = bInfo.bmBitsPixel;
- bMapInfo->bmiHeader.biClrImportant = 0;
- bMapInfo->bmiHeader.biCompression = 0;
- bMapInfo->bmiHeader.biHeight = bInfo.bmHeight;
- bMapInfo->bmiHeader.biPlanes = bInfo.bmPlanes;
- bMapInfo->bmiHeader.biSize = sizeof(BITMAPINFO);
- bMapInfo->bmiHeader.biSizeImage = bInfo.bmHeight*bInfo.bmWidthBytes;
- bMapInfo->bmiHeader.biWidth = bInfo.bmWidth;
- bMapInfo->bmiHeader.biXPelsPerMeter = 0;
- bMapInfo->bmiHeader.biYPelsPerMeter = 0;
- //获取位图的实际数据
- char* pData = new char[bMapInfo->bmiHeader.biSizeImage];
- int len = GetDIBits(pDC->m_hDC,bitmap,0,bInfo.bmHeight,pData,bMapInfo,DIB_RGB_COLORS);
- BITMAPFILEHEADER bFileHeader;
- bFileHeader.bfType = 0x4D42;
- bFileHeader.bfReserved1 = 0;
- bFileHeader.bfReserved2 = 0;
- bFileHeader.bfSize = sizeof(BITMAPFILEHEADER);
- bFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+panelsize;
- //向文件里写入位图数据
- file.Write(&bFileHeader,sizeof(BITMAPFILEHEADER));
- file.Write(&bMapInfo->bmiHeader,sizeof(BITMAPINFOHEADER));
- file.Write(pData,bMapInfo->bmiHeader.biSizeImage+panelsize);
- file.Close();
- delete pData;
- LocalFree(bMapInfo);
- }
- bitmap.DeleteObject();
- memDC.DeleteDC();
- }
版权声明:本文博主原创文章,博客,未经同意,不得转载。
保存画面为图片 当前MFC保存该程序为图片 c++ vc的更多相关文章
- python 从视频中提取图片,并保存在硬盘上
使用python的moviepy库来提取视频中的图片,按照视频每帧一个图片的方式来保存. extract images from video, than save them to disk from ...
- h5页面转图片长按保存
5页面经常会遇到此类需求.将最后的结果页转换为图片长按保存.下面介绍一下实现此需求的过程 1,依赖安装 cnpm install html2canvas --save 2,依赖引入,使用 绑定 初始化 ...
- C# winform 窗体应用程序之图片上传Oracle数据库保存字段BLOB
C# winform 窗体应用程序之图片上传Oracle数据库保存字段BLOB 我用的数据库是Oracle,就目前来看,许多数据库现在都倾向于Oracle数据库,对ORACLE数据库基本的操作也是必须 ...
- SpringMVC上传文件(图片)并保存到本地
SpringMVC上传文件(图片)并保存到本地 小记一波~ 基本的MVC配置就不展示了,这里给出核心代码 在spring-mvc的配置文件中写入如下配置 <bean id="multi ...
- html 移动端关于长按图片弹出保存问题
在做html5项目的时候有个需求是要拖动一个图片,但是又不要用户长时间按着弹出保存框.首先想到的就是在点图片的时候阻止默认事件的发生: js停止冒泡· function myfn(e){ window ...
- 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) # 进行图片的 ...
- 生成二维码,并且保存,指定位置的view成图片,并且保存到本地相册
效果图: 保存的图片效果是: 保存到本地的,是整个视图,不只是单单的二维码的图片, 在了解的一番过程之后,我知道了, 1.首先要去获取保存图片的写入权限:(使用 https://github.com/ ...
- PHP抓取远程图片到本地保存(如何把错误信息用text文件写入)
最近在工作中需要开发了一个用户素材功能,里面需要将网上的各种图片素材进行本地化存储.于是在网上找了一些相关资料,并根据自身开发需要,整理了一下主要的逻辑代码. /** * PHP将网页上的图片攫取到本 ...
- 什么是Nib文件?(Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口)
Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口.Nib文件是Interface Builder文档.通常您会使用Interface Builder ...
随机推荐
- 《Java设计模式》之抽象工厂模式
场景问题 举个生活中常见的样例--组装电脑.我们在组装电脑的时候.通常须要选择一系列的配件,比方CPU.硬盘.内存.主板.电源.机箱等. 为讨论使用简单点.仅仅考虑选择CPU和主板的问题. 其实,在选 ...
- Android自定义组件系列【8】——遮罩文字动画
遮罩文字的动画我们在Flash中非常常见,作为Android的应用开发者你是否也想将这种动画做到你的应用中去呢?这一篇文章我们来看看如何自定义一个ImageView来实现让一张文字图片实现文字的遮罩闪 ...
- C++学习笔记8-操作符&指针
1. 重载操作符 赋值操作符的返回类型应该与内置类型赋值运算返回的类型同样.内置类型的赋值运算返回对右操作数的引用,因此,赋值操作符也返回对同一类类型的引用.比如.Sales_item的赋值操作符能 ...
- Android 从硬件到应用:一步一步向上爬 4 -- 使用 JNI 方法调硬件驱动
Android下,java应用程序通过JNI方法调用硬件抽象层模块,在Android 从硬件到应用:一步一步向上爬 3 -- 硬件抽象层訪问硬件驱动 中我们已经编译好了硬件抽象层模块,以下就要開始为H ...
- 解决Eclipse中文乱码 分类: B1_JAVA 2014-06-25 11:23 336人阅读 评论(0) 收藏
使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件编码格式的选项,我们可以通过设置编码 格式解决乱码问题.在Eclipse可以从几个层面设置编 ...
- 【37.21%】【codeforces 721B】Passwords
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Android 调整透明度的图片查看器
本文以实例讲解了基于Android的可以调整透明度的图片查看器实现方法,具体如下: main.xml部分代码如下: <?xml version="1.0" encoding ...
- JM-1 手机网站开发测试环境搭建
JM-1 手机网站开发测试环境搭建 一.总结 一句话总结:WEB服务器环境可实现局域网内轻松访问.360wifi可以实现局域网. 二.微网站开发环境: 1.把微网站放到本机wamp环境下,用pc浏览器 ...
- Extended paging tables to map guest physical memory addresses from virtual memory page tables to host physical memory addresses in a virtual machine system
A processor including a virtualization system of the processor with a memory virtualization support ...
- 数字图像处理原理与实践(MATLAB版)勘误表
本文系<数字图像处理原理与实践(MATLAB版)>一书的勘误表. [内容简单介绍]本书全面系统地介绍了数字图像处理技术的理论与方法,内容涉及几何变换.灰度变换.图像增强.图像切割.图像去噪 ...