C语言掩码图生成bmp,生成BMP格式位图,附C++代码.DOC

本文详细介绍了如何使用C++生成BMP格式的位图文件,包括BMP文件的四部分构成:文件信息头、位图信息头、调色板和位图数据。通过理解每个部分的结构和作用,可以编写函数实现从RGB24数据创建BMP文件。示例代码展示了具体的实现过程。
摘要由CSDN通过智能技术生成

生成BMP格式位图,附C++代码.DOC

生成BMP格式位图,附C++代码

?

USB视频摄像头的媒体格式为RGB24和I42

?

首先,我们了解一下BMP的格式,BMP有四部分组成,用表格表示如下:

?

?

?

?

?

1. 文件信息头

2. 位图信息头

3. 调色板

4. 位图数据

?

?

第一部分,文件信息头的格式如下:

typedef struct tagBITMAPFILEHEADER {

????????WORD????bfType;

????????DWORD???bfSize;

????????WORD????bfReserved1;

????????WORD????bfReserved2;

????????DWORD???bfOffBits;

} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;

共有14个字节,其中bfType为文件类型,BMP的类型为0×4d42,也就是字母m和b;bfSize是文件大小,为1,2,3,4部分大小的总和;bfReserved1和bfReserved2为1,2,3部分大小的总和。

?

第二部分,位图信息头,定义如下:

typedef struct tagBITMAPINFOHEADER{

????????DWORD??????biSize;

????????LONG???????biWidth;

????????LONG???????biHeight;

????????WORD???????biPlanes;

????????WORD???????biBitCount;

????????DWORD??????biCompression;

????????DWORD??????biSizeImage;

????????LONG ??????biXPelsPerMeter;

????????LONG???????biYPelsPerMeter;

????????DWORD??????biClrUsed;

????????DWORD??????biClrImportant;

} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;

总共40个字节,字段比较多,可以查看MSDN中的说明,对于RGB24的位图,这个结构体一般定义如下:

BITMAPINFOHEADER bih;

???????bih.biSize = sizeof(BITMAPINFOHEADER);

???????bih.biWidth = width;

???????bih.biHeight = height;

???????bih.biPlanes = 1;

???????bih.biBitCount = 24;

???????bih.biCompression = 0;

???????bih.biSizeImage = size;

???????bih.biXPelsPerMeter = 0;

???????bih.biYPelsPerMeter = 0;

???????bih.biClrUsed = 0;

???????bih.biClrImportant = 0;

?

第三部分是调色板信息,定义如下:

typedef struct tagRGBQUAD {

????????BYTE????rgbBlue;

????????BYTE????rgbGreen;

????????BYTE????rgbRed;

????????BYTE????rgbReserved;

} RGBQUAD;

这部分用来表示RGB各色的强度,一般情况我们不把这一部分写到文件中。

?

第四部分就是真正的数据,比如宽度和高度分别是320和240,这部分数据的长度应该为320*240*3(每个像素点上有3个字节,分别用来表示b,g,r的颜色)。

?

根据对BMP格式的说明,我们可以轻易的写出一个生成BMP图像的函数,如下所示:

?

// pData为rgb24数据,width为位图宽度,height为位图高度,filename为位图文件的名字

void Snapshot( BYTE * pData, int width, int height, const char * filename )

{

???????int size = width*height*3; // 每个像素点3个字节

?

???????// 位图第一部分,文件信息

???????BITMAPFILEHEADER bfh;

???????bfh.bfType = 0×4d42;??//bm

???????bfh.bfSize = size??// data size

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值