JPEG文件在VC数据结构

来源:互联网 发布:mac插件在哪里看 编辑:程序博客网 时间:2024/05/16 05:34

 最好先看下我博客里的<<JPEG文件格式简单分析>>一文

JPEG文件分为两个部分,标记码(Tag)和压缩数据。

码流格式设计依次为:SOI、APP0info、DQTinfo、DRIinfo、SOFinfo、DHTinfo、SOSinfo和EOI。具体结构如下:

#define BYTE unsigned char
#define WORD unsigned short int

#define SOI 0xFFD8     // Start of Image
#define EOI 0xFFD9     // End of Image

static struct APP0info{
 WORD marker;                    // 0xFFE0
 WORD length;     // 16 for usual JPEG
 BYTE JFIFsignature[5];   // ="JFIF",'/0'=0x4A,0x46,0x49,0x46,0x00
 WORD version;     // 0x0101,0x0102
 BYTE xyunits;     // 0 for default
 WORD xdensity;    
 WORD ydensity;
 BYTE num_of_x;
 BYTE num_of_y;
//RGB0---RGBn ??
}APP0info;

static struct DQTinfo{    // Define quantization table
 WORD marker;     // 0xFFDB
 WORD length;     // 132 for usual case
 BYTE QTYinfo;     // Pq(7:4)=0,1:8bit or 16bit precision; Tq(3:0)=0,1,2,3:id of QT table
 BYTE Ytable[64];    // may be WORD size according to Pq,zigzag arrange
 BYTE QTCbCrinfo;
 BYTE CbCrtable[64];
}DQTinfo;

static struct DRIinfo{    // Define Start interval
 WORD marker;     // 0xFFDD
 WORD length;
 WORD RI;
}DRIinfo;

static struct SOFinfo{    //Start of Frame
 WORD marker;     // 0xFFC0
 WORD length;     //=17 for a true color YCbCr
 BYTE precision;     // for basemode:0x08, 8bit/sample
 WORD height;
 WORD width;
 BYTE num_of_component;   // 0x01 for grayscale, 0x03 for YCrCb
 BYTE IdY;
 BYTE Y_SFactor;
 BYTE QTY;
 BYTE IdCb;
 BYTE Cb_SFactor;
 BYTE QTCb;
 BYTE IdCr;
 BYTE Cr_SFactor;
 BYTE QTCr;
}SOFinfo;

static struct DHTinfo{    // Define Huffman Table
 WORD marker;     // 0xFFC4
 WORD length;     // =0x01A2
 BYTE HT_YDC_info;    // Tc(7:4):0 for DC and 1 for AC, Th(3:0): for base mode, it can be 0,1
 BYTE YDC_index[16];
 BYTE YDC_values[12];
 BYTE HT_YAC_info;    // 0x10
 BYTE YAC_index[16];
 BYTE YAC_value[162];
 BYTE HT_CbCrDC_info;
 BYTE CbCrDC_index[16];
 BYTE CbCrDC_value[12];
 BYTE HT_CbCrAC_info;   // 0x11
 BYTE CbCrAC_index[16];
 BYTE CbCrAC_values[162];
}DHTinfo;

static struct SOSinfo{
 WORD marker;     // 0xFFDA
 WORD length;     // =12
 BYTE num_scan_component;  // for base mode 1,3
 BYTE IdY;
 BYTE HTY;
 BYTE IdCb;
 BYTE HTCb;
 BYTE IdCr;
 BYTE HTCr;
 BYTE Ss,Se,Bf;     // 0x00, 0x3F, 0x00
}SOSinfo;

 

原创粉丝点击