连续两三天没吃好,没睡好,就因为老师让把图片输出。可真苦了我啊,那做过这东西。百度,谷歌我是看了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文件中相关推荐

  1. java 格式化json_JAVA 格式化JSON数据并保存到json文件中的实例

    使用fastjson格式化json数据并保存到文件 /** * 将JSON数据格式化并保存到文件中 * @param jsonData 需要输出的json数 * @param filePath 输出的 ...

  2. 利用xpath爬取链家租房房源数据并利用pandas保存到Excel文件中

    我们的需求是利用xpath爬取链家租房房源数据,并将数据通过pandas保存到Excel文件当中 下面我们看一下链家官网的房源信息(以北京为例) 如图所示,我们通过筛选得到北京租房信息 那么我们需要将 ...

  3. 使用Python对PDF文件进行词频统计分析并保存到CSV文件中

    PDF转TXT文件要安装的库 pdfminer3k 分词处理要安装的库 jieba # -*- coding:utf-8 import sys import importlib importlib.r ...

  4. Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中

    Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中 1.需要的Python模块 主要是requests模块,用于得到的网页的数据 安装命令为:pip install requests 2 ...

  5. 豆瓣电影Top250信息爬取并保存到excel文件中

    豆瓣电影Top250下载并保存到excel文件中 效果图 前言 确定目标网页url 爬取过程 导入相关库 页面内容的获取 页面解析 数据提取 主函数的编写 函数调用 数据存储 完整代码 结语 效果图 ...

  6. 练习:selenium 爬取京东的电脑商品100页的数据并保存到csv文件中

    练习:selenium 爬取京东的电脑商品100页的数据并保存到csv文件中 from selenium.webdriver import Chrome, ChromeOptions import t ...

  7. R语言使用pdf函数将可视化图像结果保存到pdf文件中、使用pdf函数打开图像设备、使用dev.off函数关闭图像设备、自定义width参数和height参数指定图像的宽度和高度

    R语言使用pdf函数将可视化图像结果保存到pdf文件中.使用pdf函数打开图像设备.使用dev.off函数关闭图像设备.自定义width参数和height参数指定图像的宽度和高度 目录

  8. R语言使用pdf函数将可视化图像结果保存到pdf文件中、使用pdf函数打开图像设备、使用dev.off函数关闭图像设备、自定义paper参数指定pdf的纸张类型(多使用A4)

    R语言使用pdf函数将可视化图像结果保存到pdf文件中.使用pdf函数打开图像设备.使用dev.off函数关闭图像设备.自定义paper参数指定pdf的纸张类型(多使用A4) 目录

  9. php 将数组结果作为返回值保存到php文件中

    经常在处理一些数据是会把一些结果json_encode然后保存到文本中,用的时候再取出来json_decode执行遍历等操作, 在一次开发接口过程中发现整个接口性能不佳,请求很慢,同事指出其中一条优化 ...

  10. python实现RGB888格式的图片数据保存到bmp文件

    参考文章:http://exasic.com/article/index.php?md=py-bmp 功能描述:获取图片像素值,格式是rgb888,取出rgb565的有效数据,再将像素值BGR888保 ...

最新文章

  1. Virtual Earth API 在指定zoomLevel添加自定义图层
  2. 解决.NET 4.0下无法直接运行.NET 2.0程序的问题
  3. 每秒改变一次背景颜色以及由此引发的一些有趣的小事情(.net方向)
  4. linux程序重读分区表,重读分区表, 求教~~, 系统是 Cent6.5,
  5. mysql cluster自动安装_MySQL Cluster 安装
  6. Matlab生成各种伪随机信号_idinput指令
  7. http --- 密码、密钥、对称(公开)密钥加密系统、数字签名、数字证书的一些概念
  8. SQL语句:建表语句、插入语句、查询语句、增加列、删除列、查询语句like、修改语句
  9. Java的static,final,代码块,内部类,抽象类,接口等
  10. linux+虚拟机上的wdcp,linux虚拟主机服务器wdcp系统教程
  11. how to write a good api
  12. 各种网线的分类和区别
  13. Excel从入门到精通--基础篇
  14. python创意网络爬虫_Python网络爬虫(一)
  15. winpe 安装 win7 过程问题综述
  16. FPGA学习之毛刺问题
  17. SpringBoot application.properties读取属性配置文件中文显示为乱码问题的解决
  18. win10如何关闭计算机设备和驱动器非硬盘图标
  19. 二年级课程表(4月11日-4月15日)
  20. 【算法】几分钟时间让你彻底学会—时间复杂度

热门文章

  1. 自动触发click事件
  2. 阿里云服务器上安装mysql的详细步骤
  3. bootstrap table 服务器端分页--ashx+ajax
  4. eclipse不格式化注释
  5. 顶点计划:寝室作息讨论
  6. Mysql数据库分库和分表方式(常用)
  7. 写函数,输入n个数字输出最大值和最小值
  8. IIS SSL证书 指定的登录会话不存在,可能已被终止 HRESULT:0x80070520
  9. 如何制作响应式网站?12个优秀案例参考
  10. 为什么要使用多层开发?