📄 jpegstuct.h
字号:
//jpegstruct.h
//JPEG文件标记结构
const static unsigned short SOITAG = 0xD8FF;//文件开始标记 0xFFD8
const static unsigned short EOITAG = 0xD9FF;//文件结束标记 0xFFD9
#pragma pack(push,1)
typedef struct tagJPEGAPP0 //APP0结构
{
unsigned short segmentTag; //APP0标记码,必须为
unsigned short length; //JPEGAPP0长度,不包括FFE0,如果没有缩略图则为16
char id[5]; //文件标记 "JFIF" + "\0"
unsigned short ver; //文件版本,为0101或0102
unsigned char densityUnit; //密度单位,0=无单位 1=点数/英寸 2=点数/厘米
unsigned short densityX; //X轴方向密度,一般为1
unsigned short densityY; //Y轴方向密度,一般为1
unsigned char thp; //缩略图水平像素数,写0
unsigned char tvp; //缩略图垂直像素数,写0
}JPEGAPP0; // = {0xE0FF,16,'J','F','I','F',0,0x0101,0,1,1,0,0};
#pragma pack(pop)
#pragma pack(push,1)
typedef struct tagJPEGAPPN //APPN结构,本程序中未涉及
{
unsigned short segmentTag; //APPn标记码,从FFE0 - FFEF n=0-F
unsigned short length; //JPEGAPPN长度
}JPEGAPPN;
#pragma pack(pop)
#pragma pack(push,1) //DQT(define quantization table)结构(8 bits 量化表)
typedef struct tagJPEGDQT_8BITS
{
unsigned short segmentTag; //8 bitsDQT标记码,必须为0xFFDB
unsigned short length; //8 bitsDQT长度,这里是0x4300
unsigned char tableInfo; //量化表信息,关于量化表数量和编号
unsigned char table[64]; //量化表(8 bits)
}JPEGDQT_8BITS;
#pragma pack(pop)
#pragma pack(push,1) //DQT(define quantization table)段结构(16 bits 量化表)
typedef struct tagJPEGDQT_16BITS
{
unsigned short segmentTag; //16 bitsDQT标记码,必须为0xFFDB
unsigned short length; //16 bitsDQT长度,这里是0x8300
unsigned char tableInfo; //量化表信息,关于量化表数量和编号
unsigned short table[64]; //量化表(16 bits)
}JPEGDQT_16BITS;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct tagJPEGSOF0_24BITS //SOF0(start of frame)段结构(24 bits),其余还有SOF1-SOFF
{
unsigned short segmentTag; //SOF标记码长度,必须为0xFFC0
unsigned short length; //SOF0长度,24bits为17
unsigned char precision; //精度,每个信号分量所用的位数,基本系统为0x08
unsigned short height; //图像高度
unsigned short width; //图像宽度
unsigned char sigNum; //信号数量,24 bits JPEG应该为3,8 bits为1
unsigned char YID; //信号编号,亮度Y
unsigned char HVY; //采样方式,0-3位是垂直采样,4-7位是水平采样
unsigned char QTY; //亮度Y对应的量化表号
unsigned char UID; //信号编号,色差U
unsigned char HVU; //采样方式,0-3位是垂直采样,4-7位是水平采样
unsigned char QTU; //色差U对应的量化表号
unsigned char VID; //信号编号,色差V
unsigned char HVV; //采样方式,0-3位是垂直采样,4-7位是水平采样
unsigned char QTV; //色差V对应的量化表号
}JPEGSOF0_24BITS; // = {0xC0FF,0x0011,8,0,0,3,1,0x11,0,2,0x11,1,3,0x11,1};
#pragma pack(pop)
#pragma pack(push,1)
typedef struct tagJPEGSOF0_8BITS //SOF0段构(8 bits),其余还有SOF1-SOFF,本程序未涉及
{
unsigned short segmentTag; //SOF标记码,必须为0xFFC0
unsigned short length; //SOF0长度,8bits为11
unsigned char precision; //精度,每个信号分量所用的位数,基本系统为0x08
unsigned short height; //图像高度
unsigned short width; //图像宽度
unsigned char sigNum; //信号数量,真彩JPEG应该为3,灰度为1
unsigned char YID; //信号编号,亮度Y
unsigned char HVY; //采样方式,0-3位是垂直采样,4-7位是水平采样
unsigned char QTY; //对应量化表号
}JPEGSOF0_8BITS; // = {0xC0FF,0x000B,8,0,0,1,1,0x11,0};
#pragma pack(pop)
#pragma pack(push,1)
typedef struct tagJPEGDHT //DHT(define huffman table)段结构
{
unsigned short segmentTag; //DHT标记码,必须为0xFFC4
unsigned short length; //JPEGDHT长度
unsigned char tableInfo; //表信息,基本系统中 bit0-3 为Huffman表的数量,bit4 为0指DC的Huffman表 为1指AC的Huffman表,bit5-7保留,必须为0
unsigned char huffCode[16]; //程度为1-16位的Huffman码字的数量,分别存放在数组huffCode[1-16]中
//unsigned char* huffVal; //依次存放各码字对应的值,本程序未启用
}JPEGDHT;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct tagJPEGSOS_24BITS // SOS(start of scan)结构,24 bits
{
unsigned short segmentTag; //SOS标记码,必须为0xFFDA
unsigned short length; //SOS长度,这里是12
unsigned char sigNum; //信号分量数,24bits为0x03,8bits为0x01
unsigned char YID; //Y信号ID,这里是1
unsigned char HTY; //Huffman表号,bit0-3为DC信号表的编号,bit4-7为AC信号表的编号
unsigned char UID; //U信号ID,这里是2
unsigned char HTU;
unsigned char VID; //V信号ID,这里是3
unsigned char HTV;
unsigned char Ss; //基本系统中为0
unsigned char Se; //基本系统中为63
unsigned char Bf; //基本系统中为0
}JPEGSOS_24BITS; // = {0xDAFF,0x000C,3,1,0,2,0x11,3,0x11,0,0x3F,0};
#pragma pack(pop)
#pragma pack(push,1)
typedef struct tagJPEGSOS_8BITS //SOS段结构(8bits灰度),本程序中未涉及
{
unsigned short segmentTag; //SOS标记码,必须为0xFFDA
unsigned short length; //SOS段长度,这里是8
unsigned char sigNum; //信号分量数,8bits为0x01
unsigned char YID; //亮度Y信号ID,这里是1
unsigned char HTY; //Huffman表号,bit0-3为DC信号表的编号,bit4-7为AC信号表的编号
unsigned char Ss; //基本系统中为0
unsigned char Se; //基本系统中为63
unsigned char Bf; //基本系统中为0
}JPEGSOS_8BITS; // = {0xDAFF,0x0008,1,1,0,0,0x3F,0};
#pragma pack(pop)
#pragma pack(push,1)
typedef struct tagJPEGCOM //COM段结构, 本程序未涉及
{
unsigned short segmentTag; //COM标记码,必须为0xFFFE
unsigned short length; //注释长度
}JPEGCOM;
#pragma pack(pop)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -