<span style="font-size:18px;">CFile file;                             //定义一个文件对象  _ASSERTE(file.Open(CString("E:\\94.bmp"), CFile::modeRead));//打开文件  DWORD  dwLen = file.GetLength();                    //获取文件长度  file.Seek(54, CFile::begin);     //略过位图文件头、信息头 ,为什么是54,往下看buffer = new BYTE[dwLen - 54];   //为缓冲区分配空间  file.Read(buffer, dwLen - 54);//(整个位图由文件头、信息头、调色板、颜色表这四部分组合构成typedef long LONG;typedef unsigned long DWORD;typedef unsigned short WORD;
#pragma pack (push ,1)//由于4字节对齐,而信息头大小为54字节,第一部分14字节,//第二部分40字节,所以会将第一部分补齐为16自己,直接用sizeof,打开图片时就会//遇到premature end-of-file encountered错误typedef struct {//位图文件头,14字节WORD      bfType;   //  指定文件类型,必须是0x424D,即字符串“BM”,也就是说所有.bmp文件的头两个字节都是“BM”。DWORD   bfSize;   //   位图文件的大小,包括这14个字节,以字节为单位  WORD      bfReserved1;   //   位图文件保留字,必须为0WORD      bfReserved2;   //   位图文件保留字,必须为0DWORD   bfOffBits;   //   位图数据的起始位置,以相对于位图, 文件头的偏移量表示,以字节为单位} BMPFILEHEADER_T;
#pragma pack (pop)typedef struct{//这个结构的长度是固定的,为40个字节,可以自己算一下,DWORD、LONG4个字节,WORD两个字节DWORD      biSize;//指定这个结构的长度,为40LONG       biWidth;//指定图象的宽度,单位是象素。LONG       biHeight;//指定图象的高度,单位是象素。WORD       biPlanes;//必须是1,不用考虑。WORD       biBitCount;/*指定表示颜色时要用到的位数,常用的值为1(黑白二色图), 4(16色图),8(256色), 24(真彩色图)(新的.bmp格式支持32位色,这里就不做讨论了)。*/DWORD      biCompression;/*指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定义好的常量)。要说明的是,Windows位图可以采用RLE4,和RLE8的压缩格式,但用的不多。我们今后所讨论的只有第一种不压缩的情况,即biCompression为BI_RGB的情况。*/DWORD      biSizeImage;/*指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:
biSizeImage=biWidth’ × biHeight
要注意的是:上述公式中的biWidth’必须是4的整倍数(所以不是biWidth,而是biWidth’,
表示大于或等于biWidth的,最接近4的整倍数。举个例子,如果biWidth=240,则biWidth’=240;
如果biWidth=241,biWidth’=244)。如果biCompression为BI_RGB,则该项可能为零*/LONG       biXPelsPerMeter;//指定目标设备的水平分辨率,单位是每米的象素个数LONG       biYPelsPerMeter;//指定目标设备的垂直分辨率,单位同上。DWORD      biClrUsed;//指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount指数次幂DWORD      biClrImportant;//指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。} BMPINFOHEADER_T;char * bmp_file = "fuck you.bmp";//要保存的bmp文件名,后缀不要忘了//int width = cx.GetWidth();图像宽高,已知//int height = cx.GetHeight();int datalen = width*height * 3 * sizeof(char); // 每个像素点3个字节  //_ASSERTE(l == size);// 位图第一部分,文件信息  BMPFILEHEADER_T bfh;int dw = sizeof(DWORD);int ww = sizeof(WORD);int kk = sizeof(BMPFILEHEADER_T);//14,不对齐的话会得到16,这样创建的BMP打不开int nn = sizeof(BMPINFOHEADER_T);// second section sizebfh.bfType = (WORD)0x4d42;  //bm  bfh.bfSize = datalen + kk+ nn;bfh.bfReserved1 = 0; // reserved  bfh.bfReserved2 = 0; // reserved  bfh.bfOffBits = sizeof(BMPFILEHEADER_T) + sizeof(BMPINFOHEADER_T);//真正的数据的位置  // 位图第二部分,数据信息  BMPINFOHEADER_T bih;bih.biSize = sizeof(BMPINFOHEADER_T);bih.biWidth = width;bih.biHeight = height;//有时你得到的RGB数据是从位图最后一个点开始扫描,直接写入得到的图片是倒着的,这时用-height,这样图片就正了  bih.biPlanes = 1;//为1,不用改  bih.biBitCount = 24;bih.biCompression = 0;//不压缩  bih.biSizeImage = datalen;bih.biXPelsPerMeter = 0;//2835;//像素每米  bih.biYPelsPerMeter = 0;//2835;bih.biClrUsed = 0;//已用过的颜色,24位的为0  bih.biClrImportant = 0;//每个像素都重要  FILE * fp = fopen(bmp_file, "wb");//创建bmp文件if (!fp) return-1;fwrite(&bfh, 8, 1, fp);//由于linux上4字节对齐,而信息头大小为54字节,第一部分14字节,第二部分40字节,所以会将第一部分补齐为16自己,直接用sizeof,打开图片时就会遇到premature end-of-file encountered错误  fwrite(&bfh.bfReserved2, sizeof(bfh.bfReserved2), 1, fp);fwrite(&bfh.bfOffBits, sizeof(bfh.bfOffBits), 1, fp);fwrite(&bih, sizeof(BMPINFOHEADER_T), 1, fp);//写入rgb数据fwrite(buffer, datalen, 1, fp);fclose(fp);delete[]buffer;</span>

将RGB数据写入BMP位图文件相关推荐

  1. java bmp rgb数组_将RGB数据写入BMP位图文件

    CFile file; //定义一个文件对象 _ASSERTE(file.Open(CString("E:\\94.bmp"), CFile::modeRead));//打开文件 ...

  2. 写入数据到bmp位图文件(C语言)

    在上一篇文章  读取bmp格式位图文件到二维数组(C语言)  中已经实现了读取24bits Bmp位图文件到二维数组的过程. 这次接着上一次的工作,试着用C语言将数据写入位图文件中. 基本原理和读取文 ...

  3. 将HBITMAP转换成BMP位图文件的各个部分,可以在1BIT,4BIT,8BIT,16BIT,24BIT,32BIT之间转换

    VC将HBITMAP转换成BMP位图文件的各个部分,可以在1BIT,4BIT,8BIT,16BIT,24BIT,32BIT之间转换 http://blog.ednchina.com/wxleasyla ...

  4. C++ 处理HBITMAP类型的.bmp位图文件, 代码工具

    1. 存储为HBITMAP类型的.bmp位图文件 参考:C++保存HBITMAP为位图文件的实现方法(IT技术) (qb5200.com) ImageHelper.h  #pragma once#in ...

  5. java数据存入txt_java将数据写入到txt文件中(txt有固定的格式)

    java将数据写入到txt文件中,这个应该对于学过java I/O的人来说是很简单的事情了,但是如果要将数据以固定的格式写入到txt文件中,就需要一定的技巧了. 这里举个简单的例子,以供参考: 比如我 ...

  6. SD卡FAT32文件结构(2)---创建与写入BMP位图

    下图为本人512MB诺基亚SD卡根目录的数据, 1(红色处):卷标,也就是名称,我的SD卡名称为WHETA. 2(蓝色处):文件名. 3(紫色处):文件类型.    从蓝色与紫色处,可以看出我的根目录 ...

  7. C语言读写bmp位图文件

    bitmap格式图片是未经压缩的,一般24bit位图(即一个像素点以24个二进制位表示). 分别用8个二进制位表示R/G/B三种颜色,这样一共可以表示256*256*256=16777216种颜色. ...

  8. python创建csv文件并写入-Python数据写入csv格式文件

    (只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了, ...

  9. Python数据写入csv格式文件

    (只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了, ...

最新文章

  1. windows下opencv安装及配置(vs2010环境)
  2. 配置方法_CISCO防火墙端口映射配置方法
  3. SAP Commerce Cloud B2B Organization 功能简介
  4. python list元素合并_python list 合并连接字符串的方法
  5. Picocli 2.0:事半功倍
  6. 下载matlab安装包太慢_Matlab2017a软件安装包以及安装教程
  7. 只用一套解决方案,就可解决80%的交通物流行业信息难题
  8. GIthub创建文件夹、跳转链接、Read.me添加图片和换行显示等操作
  9. 使用SQL Server代理生成计划
  10. Python进阶(十一)装饰器
  11. 支付宝第三方在线支付接口详解
  12. excel出现为了防止数据流失,无法移走非空单元格怎么办
  13. 手机计算机都无法上网,手机能上网但win7电脑不能上网怎么回事?
  14. 同事把实数作为 HashMap 的key,领导心态崩了
  15. 2500 tons quarry machine
  16. Lora、zigbee比较
  17. GIT面试题——分支
  18. 美容店信息管理系统与小程序设计与实现
  19. 文件存档、加密和解密
  20. 【Qt】QML快速入门7——输入元素

热门文章

  1. java进销存管理系统设计,基于JavaSwing进销存管理系统的设计与实现毕业论文+任务书+中期表+翻译及原文+答辩+源码+数据库+辅导视频...
  2. 校园社交类app“校园微生活”
  3. ZigBee技术简介,以及ZigBee的未来展望
  4. 用Kbuilder制作卡拉OK教程
  5. 电脑打出,[转载]告诉你电脑上特殊符号怎么打出来?
  6. 用python实现输入星座匹配性格
  7. 从产品助理到产品总监,我最常用的工具就这些
  8. 舆情分析流程及具体做法
  9. 网络工程师操作学习指南
  10. 数字孪生技术为智慧城市的建设带来哪些帮助?