博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]RGB数据保存为BMP图片
阅读量:4310 次
发布时间:2019-06-06

本文共 2960 字,大约阅读时间需要 9 分钟。

        转自:

一、BMP文件由、位图信息头、颜色信息和四部分组成。

1、BMP文件头(14字节)
typedef struct                       /**** BMP file header structure ****/  {      unsigned int   bfSize;           /* Size of file */      unsigned short bfReserved1;      /* Reserved */      unsigned short bfReserved2;      /* ... */      unsigned int   bfOffBits;        /* Offset to bitmap data */  } MyBITMAPFILEHEADER;
2、位图信息头(40字节)
typedef struct                       /**** BMP file info structure ****/  {      unsigned int   biSize;           /* Size of info header */      int            biWidth;          /* Width of image */      int            biHeight;         /* Height of image */      unsigned short biPlanes;         /* Number of color planes */      unsigned short biBitCount;       /* Number of bits per pixel */      unsigned int   biCompression;    /* Type of compression to use */      unsigned int   biSizeImage;      /* Size of image data */      int            biXPelsPerMeter;  /* X pixels per meter */      int            biYPelsPerMeter;  /* Y pixels per meter */      unsigned int   biClrUsed;        /* Number of colors used */      unsigned int   biClrImportant;   /* Number of important colors */  } MyBITMAPINFOHEADER;
3、颜色表

颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:

typedef struct tagRGBQUAD{      BYTE rgbBlue;//蓝色的亮度(值范围为0-255)      BYTE rgbGreen;//绿色的亮度(值范围为0-255)      BYTE rgbRed;//红色的亮度(值范围为0-255)      BYTE rgbReserved;//保留,必须为0  }RGBQUAD;

颜色表中的RGBQUAD结构数据的个数由biBitCount来确定:当biBitCount=1,4,8时,分别为2,16,256个表项;当biBitCount=24时,没有颜色表项。

4、位图数据

位图了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:

当biBitCount=1时,8个像素占1个字节;

当biBitCount=4时,2个像素占1个字节;

当biBitCount=8时,1个像素占1个字节;

当biBitCount=24时,1个像素占3个字节,按顺序分别为B,G,R;

 

二、将rgb数据保存为bmp图片的方法

void CDecVideoFilter::MySaveBmp(const char *filename,unsigned char *rgbbuf,int width,int height)  {      MyBITMAPFILEHEADER bfh;      MyBITMAPINFOHEADER bih;      /* Magic number for file. It does not fit in the header structure due to alignment requirements, so put it outside */      unsigned short bfType=0x4d42;                 bfh.bfReserved1 = 0;      bfh.bfReserved2 = 0;      bfh.bfSize = 2+sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+width*height*3;      bfh.bfOffBits = 0x36;        bih.biSize = sizeof(BITMAPINFOHEADER);      bih.biWidth = width;      bih.biHeight = height;      bih.biPlanes = 1;      bih.biBitCount = 24;      bih.biCompression = 0;      bih.biSizeImage = 0;      bih.biXPelsPerMeter = 5000;      bih.biYPelsPerMeter = 5000;      bih.biClrUsed = 0;      bih.biClrImportant = 0;        FILE *file = fopen(filename, "wb");      if (!file)      {          printf("Could not write file\n");          return;      }        /*Write headers*/      fwrite(&bfType,sizeof(bfType),1,file);      fwrite(&bfh,sizeof(bfh),1, file);      fwrite(&bih,sizeof(bih),1, file);        fwrite(rgbbuf,width*height*3,1,file);      fclose(file);  }

转载于:https://www.cnblogs.com/betterwgo/p/6909787.html

你可能感兴趣的文章
atitit 读书与获取知识资料的attilax的总结.docx
查看>>
B站 React教程笔记day2(3)React-Redux
查看>>
找了一个api管理工具
查看>>
C++——string类和标准模板库
查看>>
zt C++ list 类学习笔记
查看>>
git常用命令
查看>>
探讨和比较Java和_NET的序列化_Serialization_框架
查看>>
1、jQuery概述
查看>>
数组比较大小的几种方法及math是方法
查看>>
FTP站点建立 普通电脑版&&服务器版
查看>>
js 给一段代码,给出运行后的最终结果的一些综合情况、
查看>>
webservice 详解
查看>>
js自动补全实例
查看>>
VS无法启动调试:“生成下面的模块时,启用了优化或没有调试信息“
查看>>
npm 安装 sass=-=-=
查看>>
WINFORM中加入WPF控件并绑定数据源实现跨线程自动更新
查看>>
C#类对象的事件定义
查看>>
各类程序员学习路线图
查看>>
HDU 5510 Bazinga KMP
查看>>
关于select @@IDENTITY的初识
查看>>