⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpegstuct.h

📁 bf533平台图像采集程序
💻 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 + -