120 lines
2.9 KiB
C++
120 lines
2.9 KiB
C++
#ifndef BWBMP_H
|
||
#define BWBMP_H
|
||
|
||
#include <QString>
|
||
#include <QFileInfo>
|
||
|
||
|
||
#ifndef u8
|
||
#define u8 unsigned char
|
||
#endif
|
||
|
||
#ifndef u16
|
||
#define u16 unsigned short
|
||
#endif
|
||
|
||
#ifndef u32
|
||
#define u32 unsigned int
|
||
#endif
|
||
|
||
#pragma pack(push, 1) //设定为1字节对齐
|
||
|
||
// 位图的调色板
|
||
typedef union
|
||
{
|
||
u32 color;
|
||
struct
|
||
{
|
||
u8 rgbBlue;
|
||
u8 rgbGreen;
|
||
u8 rgbRed;
|
||
u8 rgbReserved;
|
||
}__attribute__ ((packed)) rgb;
|
||
} BmpRgbQuad;
|
||
|
||
// 位图文件头
|
||
typedef struct
|
||
{
|
||
u16 identifier; // 类型 一般为 "BM"
|
||
u32 fileSize; // 文件大小
|
||
u32 reserved; // 保留
|
||
u32 bitDatOffset; // 位图数据偏移,一般为 0x3E
|
||
|
||
u32 biSize; // 位图信息头大小, 一般为 0x28
|
||
u32 biWidth; // 位图宽度,以像素为单位
|
||
u32 biHeight; // 位图高度,以像素为单位
|
||
u16 biPlanes; // 位图的位面数,必须为1
|
||
u16 biBitPerPixel; // 每个像素的位数, =1, 单色位图; =4, 16色; = 8, 256色; = 24 真彩色
|
||
u32 biCompression; // 位图压缩类型, =0, 不压缩(BI_RGB); =1, BI_RLE8; = 2, BI_RLE4; = 3 BI_BITFIELDS; = 4, BI_JPEG; = 5, BI_PNG
|
||
u32 biBitmapDatSize;// 位图数据区的大小(字节数), 必须是4的整数倍
|
||
u32 biHResolution; // 水平分辨率, 像素/米
|
||
u32 biVResolution; // 垂直分辨率, 像素/米
|
||
u32 biColors; // 颜色数
|
||
u32 biImpColors; // 重要颜色数
|
||
BmpRgbQuad palette[2]; // 调色板
|
||
}__attribute__ ((packed)) BitmapHead;
|
||
|
||
// 压缩位图文件头
|
||
typedef struct
|
||
{
|
||
// 0
|
||
u32 fileId; // 整个位图文件标识
|
||
u32 blkIdx; // 当前位图块号(位图分块后的编号)
|
||
u32 datSize; // 本块位图数据区的大小(字节数)
|
||
u32 biWidth; // 本块位图有效宽度,以像素为单位
|
||
u32 biHeight; // 本块位图有效高度,以像素为单位
|
||
u32 dataChecksum; // 本块位图数据累加校验和
|
||
u32 begPos; // 本块位图起始位置(像素单位)
|
||
u32 endPos; // 本块位图结束位置(像素单位)
|
||
|
||
// 32
|
||
u8 compType; // 本块位图压缩类型, =0, 不压缩; =1, 按字节压缩;
|
||
u8 compDir; // 本块位图压缩方向, =0, 从上到下; =1, 从下到上;(喷墨方向)
|
||
|
||
// 34
|
||
u8 rev[64-2-34]; // 保留
|
||
|
||
// 62
|
||
u16 checkCrc; // 前面字段的CRC校验
|
||
}__attribute__ ((packed)) CompBmpHead;
|
||
|
||
#pragma pack(pop)
|
||
|
||
|
||
class BWBmp
|
||
{
|
||
public:
|
||
BWBmp();
|
||
|
||
public:
|
||
int LoadBiBmp(QString filename);
|
||
|
||
int SavePrBmp(QString filename);
|
||
|
||
int Compress(int idx = 0, int dir = 1);
|
||
|
||
int LoadPrBmp(QString filename);
|
||
|
||
int Unpress();
|
||
|
||
int SaveBiBmp(QString filename);
|
||
|
||
QByteArray getPrBmpDat();
|
||
|
||
private:
|
||
|
||
QByteArray m_bwDdat;
|
||
QByteArray m_prDdat;
|
||
|
||
QByteArray m_rbwDdat;
|
||
|
||
QString m_fileName;
|
||
};
|
||
|
||
|
||
|
||
|
||
|
||
|
||
#endif // BWBMP_H
|