#ifndef BMPFILEFORMAT_H
#define BMPFILEFORMAT_H
#include <QtEndian>
#include <QString>
#include <QFile>
#include <QByteArray>
#pragma pack(1)
typedef struct tagBITMAPFILEHEADER
{
quint16_le bfType; // 值为 "BM"
quint32_le bfSize; //位图文件的大小 小端
quint16_le bfReserved1; //保留字值为 0
quint16_le bfReserved2; //保留字值为 0
quint32_le bfOffBits; //位图数据的起始位置 小端
} BITMAPFILEHEADER; //大小14字节
typedef struct tagBITMAPINFOHEADER{
quint32_le biSize; //本结构所占用字节数(15-18字节)
quint32_le biWidth; //位图的宽度,以像素为单位(19-22字节)
quint32_le biHeight; //位图的高度,以像素为单位(23-26字节)
quint16_le biPlanes; //目标设备的级别,必须为1(27-28字节)
quint16_le biBitCount; //每个像素所需的位数,必须是1(双色),(29-30字节)
quint32_le biCompression; //位图压缩类型,必须是0(不压缩),(31-34字节)
quint32_le biSizeImage; //位图的大小(其中包含了为了补齐行数是4的倍数而添加的空字节),以字节为单位(35-38字节)
quint32_le biXPelsPerMeter;//位图水平分辨率,每米像素数(39-42字节)
quint32_le biYPelsPerMeter;//位图垂直分辨率,每米像素数(43-46字节)
quint32_le biClrUsed; //位图实际使用的颜色表中的颜色数(47-50字节)
quint32_le biClrImportant;//位图显示过程中重要的颜色数(51-54字节)
} BITMAPINFOHEADER; //大小40字节
void saveBMPtoFile(QString name, BITMAPFILEHEADER *header1, BITMAPINFOHEADER *header2, char *buffer)
{
QFile file(name);
if (!file.open(QIODevice::WriteOnly))
return;
file.write(reinterpret_cast<char *>(header1), sizeof (*header1));
file.write(reinterpret_cast<char *>(header2), sizeof (*header2));
file.write(buffer, header2->biWidth * header2->biHeight * header2->biBitCount / 8);
file.close();
}
#endif // BMPFILEFORMAT_H
BMP文件格式
最新推荐文章于 2023-01-21 02:11:17 发布