?? jpegformat.h
字號:
//文件開始,開始標記為0xFFD8
const static WORD SOITAG = 0xD8FF;
//文件結束,結束標記為0xFFD9
const static WORD EOITAG = 0xD9FF;
//JFIF APP0段結構
#pragma pack(push,1)
typedef struct tagJPEGAPP0
{
WORD segmentTag; //APP0段標記,必須為FFE0
WORD length; //段長度,一般為16,如果沒有縮略圖
CHAR id[5]; //文件標記 "JFIF" + "\0"
WORD ver; //文件版本,一般為0101或0102
BYTE densityUnit; //密度單位,0=無單位 1=點數/英寸 2=點數/厘米
WORD densityX; //X軸方向密度,通常寫1
WORD densityY; //Y軸方向密度,通常寫1
BYTE thp; //縮略圖水平像素數,寫0
BYTE tvp; //縮略圖垂直像素數,寫0
}JPEGAPP0;// = {0xE0FF,16,'J','F','I','F',0,0x0101,0,1,1,0,0};
#pragma pack(pop)
//JFIF APPN段結構
#pragma pack(push,1)
typedef struct tagJPEGAPPN
{
WORD segmentTag; //APPn段標記,從FFE0 - FFEF n=0-F
WORD length; //段長度
}JPEGAPPN;
#pragma pack(pop)
//JFIF DQT段結構(8 bits 量化表)
#pragma pack(push,1)
typedef struct tagJPEGDQT_8BITS
{
WORD segmentTag; //DQT段標記,必須為0xFFDB
WORD length; //段長度,這里是0x4300
BYTE tableInfo; //量化表信息
BYTE table[64]; //量化表(8 bits)
}JPEGDQT_8BITS;
#pragma pack(pop)
//JFIF DQT段結構(8 bits 量化表)
#pragma pack(push,1)
typedef struct tagJPEGDQT_16BITS
{
WORD segmentTag; //DQT段標記,必須為0xFFDB
WORD length; //段長度,這里是0x8300
BYTE tableInfo; //量化表信息
WORD table[64]; //量化表(16 bits)
}JPEGDQT_16BITS;
#pragma pack(pop)
//JFIF SOF0段結構(真彩),其余還有SOF1-SOFF
#pragma pack(push,1)
typedef struct tagJPEGSOF0_24BITS
{
WORD segmentTag; //SOF段標記,必須為0xFFC0
WORD length; //段長度,真彩圖為17,灰度圖為11
BYTE precision; //精度,每個信號分量所用的位數,基本系統為0x08
WORD height; //圖像高度
WORD width; //圖像寬度
BYTE sigNum; //信號數量,真彩JPEG應該為3,灰度為1
BYTE YID; //信號編號,亮度Y
BYTE HVY; //采樣方式,0-3位是垂直采樣,4-7位是水平采樣
BYTE QTY; //對應量化表號
BYTE UID; //信號編號,色差U
BYTE HVU; //采樣方式,0-3位是垂直采樣,4-7位是水平采樣
BYTE QTU; //對應量化表號
BYTE VID; //信號編號,色差V
BYTE HVV; //采樣方式,0-3位是垂直采樣,4-7位是水平采樣
BYTE QTV; //對應量化表號
}JPEGSOF0_24BITS;// = {0xC0FF,0x0011,8,0,0,3,1,0x11,0,2,0x11,1,3,0x11,1};
#pragma pack(pop)
//JFIF SOF0段結構(灰度),其余還有SOF1-SOFF
#pragma pack(push,1)
typedef struct tagJPEGSOF0_8BITS
{
WORD segmentTag; //SOF段標記,必須為0xFFC0
WORD length; //段長度,真彩圖為17,灰度圖為11
BYTE precision; //精度,每個信號分量所用的位數,基本系統為0x08
WORD height; //圖像高度
WORD width; //圖像寬度
BYTE sigNum; //信號數量,真彩JPEG應該為3,灰度為1
BYTE YID; //信號編號,亮度Y
BYTE HVY; //采樣方式,0-3位是垂直采樣,4-7位是水平采樣
BYTE QTY; //對應量化表號
}JPEGSOF0_8BITS;// = {0xC0FF,0x000B,8,0,0,1,1,0x11,0};
#pragma pack(pop)
//JFIF DHT段結構
#pragma pack(push,1)
typedef struct tagJPEGDHT
{
WORD segmentTag; //DHT段標記,必須為0xFFC4
WORD length; //段長度
BYTE tableInfo; //表信息,基本系統中 bit0-3 為Huffman表的數量,bit4 為0指DC的Huffman表 為1指AC的Huffman表,bit5-7保留,必須為0
BYTE huffCode[16];//1-16位的Huffman碼字的數量,分別存放在數組[1-16]中
//BYTE* huffVal; //依次存放各碼字對應的值
}JPEGDHT;
#pragma pack(pop)
// JFIF SOS段結構(真彩)
#pragma pack(push,1)
typedef struct tagJPEGSOS_24BITS
{
WORD segmentTag; //SOS段標記,必須為0xFFDA
WORD length; //段長度,這里是12
BYTE sigNum; //信號分量數,真彩圖為0x03,灰度圖為0x01
BYTE YID; //亮度Y信號ID,這里是1
BYTE HTY; //Huffman表號,bit0-3為DC信號的表,bit4-7為AC信號的表
BYTE UID; //亮度Y信號ID,這里是2
BYTE HTU;
BYTE VID; //亮度Y信號ID,這里是3
BYTE HTV;
BYTE Ss; //基本系統中為0
BYTE Se; //基本系統中為63
BYTE Bf; //基本系統中為0
}JPEGSOS_24BITS;// = {0xDAFF,0x000C,3,1,0,2,0x11,3,0x11,0,0x3F,0};
#pragma pack(pop)
// JFIF SOS段結構(灰度)
#pragma pack(push,1)
typedef struct tagJPEGSOS_8BITS
{
WORD segmentTag; //SOS段標記,必須為0xFFDA
WORD length; //段長度,這里是8
BYTE sigNum; //信號分量數,真彩圖為0x03,灰度圖為0x01
BYTE YID; //亮度Y信號ID,這里是1
BYTE HTY; //Huffman表號,bit0-3為DC信號的表,bit4-7為AC信號的表
BYTE Ss; //基本系統中為0
BYTE Se; //基本系統中為63
BYTE Bf; //基本系統中為0
}JPEGSOS_8BITS;// = {0xDAFF,0x0008,1,1,0,0,0x3F,0};
#pragma pack(pop)
// JFIF COM段結構
#pragma pack(push,1)
typedef struct tagJPEGCOM
{
WORD segmentTag; //COM段標記,必須為0xFFFE
WORD length; //注釋長度
}JPEGCOM;
#pragma pack(pop)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -