Bitmap对象保存到bmp文件中
连续两三天没吃好,没睡好,就因为老师让把图片输出。可真苦了我啊,那做过这东西。百度,谷歌我是看了N百页,有多种多这样的方法,不过有的不符合我要求,有的压根就运行不了。比如上一篇日志所记录的方法,那是抓屏,然后输出到文件,非我所要啊。我要的是把已经存在的Bitmap对象输出到文件。
在看了N边bmp相关的文章之后,终于决定慢慢自己写(不能总靠别人吃饭啊)。文件头、信息头部分完全可以写出,到数据部分,遇到不少困难,试了很多方法都以失败告终。最终利用网上一大虾的方法写出来了(百度一百能发现这位大侠的文章,不好意思我给忘了网址了,还是谢过!!)
void CShowImageView::OnTest3()
{
CMainFrame* mainframe=(CMainFrame*)(AfxGetApp()->GetMainWnd() );
COilSpillOpticalDectDoc* pDoc=(COilSpillOpticalDectDoc*)GetDocument();
CFile file;
CFileException e;
CFileDialog dlg(FALSE,"*.bmp",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"record file(*.bmp)|*.bmp|All Files(*.*)|*.*||");
if(dlg.DoModal()!=IDOK)
return;
CString pathname=dlg.GetPathName();
// CString pathname.Format("%s/.bmp",pathname);
if(!file.Open(pathname,CFile::modeCreate|CFile::modeReadWrite,&e))
{
AfxMessageBox("文件打开失败!错误码:%u\n",e.m_cause);
return;
}
/* LPTSTR szFile=pathname.GetBuffer(pathname.GetLength()+1);
pathname.ReleaseBuffer();
CFile file;
if(!file.Open(szFile,CFile::modeWrite|CFile::modeCreate))
return ;
*/
//=pDoc->mem_bmp;
// if(view_bmp!=NULL) delete view_bmp;
view_bmp=pDoc->mem_bmp;
if(pDoc->ExReport==FALSE)//画布进行旋转
{
view_bmp->RotateFlip(RotateNoneFlipY);
pDoc->ExReport=TRUE;
}
BITMAP bitmap;
HBITMAP hbitmap;
view_bmp->GetHBITMAP(Color(),&hbitmap);
GetObject(hbitmap, sizeof(bitmap), (LPSTR)&bitmap);
// CBitmap* pbm = CBitmap::FromHandle(hbitmap);
// pbm->GetBitmap(&bitmap);
LPBITMAPINFOHEADER lpbi;
HANDLE fdib;
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bi;
bmfh.bfType=0x4d42;
bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bmfh.bfSize=bmfh.bfOffBits+bitmap.bmWidth*bitmap.bmHeight*4;
bmfh.bfReserved1=0;
bmfh.bfReserved2=0;
//DWORD dwSize=(pDoc->nBufferSizeX*8+31 )/32 * 4 *pDoc->nBufferSizeY;
//int viewx=mainframe->viewX;
//LONG bitmapx=bitmap.bmWidth;
//biSizeImage=(biWidth*biBitCount+31)/32*4*biHeight
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bitmap.bmWidth;
bi.biHeight = bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = 32;
bi.biCompression = BI_RGB;
bi.biSizeImage =bi.biWidth*4*bi.biHeight ;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrImportant = 0;
bi.biClrUsed = 0;
//计算位图的大小,并分配相应的内存空间,注意的是没有分配BITMAPFILEHEADER。
DWORD dwbmdibitsize=((bitmap.bmWidth*32+31)/8)*bitmap.bmHeight;
fdib=GlobalAlloc(GHND,dwbmdibitsize+sizeof(BITMAPINFOHEADER));
lpbi=(LPBITMAPINFOHEADER)::GlobalLock(fdib);
*lpbi=bi;//将bi中的数据写入分配的内存中。
HDC hdc=::GetDC(NULL);
GetDIBits(hdc,hbitmap,0,(UINT)bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER),(BITMAPINFO *)lpbi,DIB_RGB_COLORS);
file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
DWORD dwdibsize=sizeof(BITMAPINFOHEADER)+dwbmdibitsize;
file.Write((LPSTR)lpbi,dwdibsize);
::GlobalUnlock(fdib);
::GlobalFree(fdib);
file.Close();
GetImgInfoView()->CreateReport(pathname);//,file);
pDoc->dibfill=0;
zoom=0;
}
转载于:https://www.cnblogs.com/gisbingxin/archive/2009/05/09/1453164.html
Bitmap对象保存到bmp文件中相关推荐
- java 格式化json_JAVA 格式化JSON数据并保存到json文件中的实例
使用fastjson格式化json数据并保存到文件 /** * 将JSON数据格式化并保存到文件中 * @param jsonData 需要输出的json数 * @param filePath 输出的 ...
- 利用xpath爬取链家租房房源数据并利用pandas保存到Excel文件中
我们的需求是利用xpath爬取链家租房房源数据,并将数据通过pandas保存到Excel文件当中 下面我们看一下链家官网的房源信息(以北京为例) 如图所示,我们通过筛选得到北京租房信息 那么我们需要将 ...
- 使用Python对PDF文件进行词频统计分析并保存到CSV文件中
PDF转TXT文件要安装的库 pdfminer3k 分词处理要安装的库 jieba # -*- coding:utf-8 import sys import importlib importlib.r ...
- Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中
Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中 1.需要的Python模块 主要是requests模块,用于得到的网页的数据 安装命令为:pip install requests 2 ...
- 豆瓣电影Top250信息爬取并保存到excel文件中
豆瓣电影Top250下载并保存到excel文件中 效果图 前言 确定目标网页url 爬取过程 导入相关库 页面内容的获取 页面解析 数据提取 主函数的编写 函数调用 数据存储 完整代码 结语 效果图 ...
- 练习:selenium 爬取京东的电脑商品100页的数据并保存到csv文件中
练习:selenium 爬取京东的电脑商品100页的数据并保存到csv文件中 from selenium.webdriver import Chrome, ChromeOptions import t ...
- R语言使用pdf函数将可视化图像结果保存到pdf文件中、使用pdf函数打开图像设备、使用dev.off函数关闭图像设备、自定义width参数和height参数指定图像的宽度和高度
R语言使用pdf函数将可视化图像结果保存到pdf文件中.使用pdf函数打开图像设备.使用dev.off函数关闭图像设备.自定义width参数和height参数指定图像的宽度和高度 目录
- R语言使用pdf函数将可视化图像结果保存到pdf文件中、使用pdf函数打开图像设备、使用dev.off函数关闭图像设备、自定义paper参数指定pdf的纸张类型(多使用A4)
R语言使用pdf函数将可视化图像结果保存到pdf文件中.使用pdf函数打开图像设备.使用dev.off函数关闭图像设备.自定义paper参数指定pdf的纸张类型(多使用A4) 目录
- php 将数组结果作为返回值保存到php文件中
经常在处理一些数据是会把一些结果json_encode然后保存到文本中,用的时候再取出来json_decode执行遍历等操作, 在一次开发接口过程中发现整个接口性能不佳,请求很慢,同事指出其中一条优化 ...
- python实现RGB888格式的图片数据保存到bmp文件
参考文章:http://exasic.com/article/index.php?md=py-bmp 功能描述:获取图片像素值,格式是rgb888,取出rgb565的有效数据,再将像素值BGR888保 ...
最新文章
- Virtual Earth API 在指定zoomLevel添加自定义图层
- 解决.NET 4.0下无法直接运行.NET 2.0程序的问题
- 每秒改变一次背景颜色以及由此引发的一些有趣的小事情(.net方向)
- linux程序重读分区表,重读分区表, 求教~~, 系统是 Cent6.5,
- mysql cluster自动安装_MySQL Cluster 安装
- Matlab生成各种伪随机信号_idinput指令
- http --- 密码、密钥、对称(公开)密钥加密系统、数字签名、数字证书的一些概念
- SQL语句:建表语句、插入语句、查询语句、增加列、删除列、查询语句like、修改语句
- Java的static,final,代码块,内部类,抽象类,接口等
- linux+虚拟机上的wdcp,linux虚拟主机服务器wdcp系统教程
- how to write a good api
- 各种网线的分类和区别
- Excel从入门到精通--基础篇
- python创意网络爬虫_Python网络爬虫(一)
- winpe 安装 win7 过程问题综述
- FPGA学习之毛刺问题
- SpringBoot application.properties读取属性配置文件中文显示为乱码问题的解决
- win10如何关闭计算机设备和驱动器非硬盘图标
- 二年级课程表(4月11日-4月15日)
- 【算法】几分钟时间让你彻底学会—时间复杂度