📄 jpegheader.h
字号:
/******************************************************************************
Copyright (C), 2005-2008, MXIC(Suzhou). Co., Ltd.
File name: JpegEncoder.h
Author:
Version: V1.0
Date: 2006/04/21
Address: No.338, shenhu Rd, SIP, SuZhou, P.R.China
Description:
Define jpeg head structure
History:
1. Date: 2006/04/21
Author: Billy
Modification:
******************************************************************************/
#ifndef __JPEGHEADER_INCLUDED__
#define __JPEGHEADER_INCLUDED__
#include "DataType.h"
static struct APP0infotype{
WORD marker; //0XFFE0 APP0标记
WORD length; //0X10 APP0参数长度(16 for usual JPEG, no thumbnail)
BYTE JFIFsignature[5]; //"JFIF"标记码,共五位,其中0X00为字符串结束标记
BYTE versionhi; //0X01 JFIF版本号
BYTE versionlo; //0X01 JFIF版本号
BYTE xyunits; //0X00 x,y density unit, 其中00为未指定单位
WORD xdensity; //0X01 水平分辨率
WORD ydensity; //0X01 垂直分辨率
BYTE thumbnwidth; //0X00 水平点数
BYTE thumbnheight; //0X00 垂直点数
}APP0info = {0XFFE0, 16, 'J', 'F', 'I', 'F', 0, 1, 1, 0, 1, 1, 0, 0}; //default
//Ytable from DQTinfo should be equal to a scaled and zizag reordered version
//of the table which can be found in "tables.h": std_luminance_qt
//Cbtable , similar = std_chrominance_qt
//We'll init them in the program using set_DQTinfo function
static struct DQTinfotype{
WORD marker; //0XFFDB DQT标记,定义量化表
WORD length; //132 DQT参数长度[0X16-0X58]
BYTE QTYinfo; //高四位表示量化表的值的位数(0: 8位,1: 16位)
//低四位表示量化表的编号(0-3)(for Y)
BYTE Ytable[64]; //量化表(for Y)
BYTE QTCbinfo; //高四位表示量化表的值的位数(0: 8位,1: 16位)
//低四位表示量化表的编号(0-3)(quantization table for Cb,Cr}
BYTE Cbtable[64]; //量化表(table for Cb,Cr}
}DQTinfo;
// Default sampling factors are 1,1 for every image component: No downsampling
static struct SOF0infotype {
WORD marker; //0XFFC0 SOF0标记
WORD length; //0X11 SOF0参数长度[0XA0-0XB0] for a truecolor YCbCr JPG
BYTE precision ;//0X08 每个像素的位数 Should be 8: 8 bits/sample
WORD height; //图像高度
WORD width; //图像宽度
BYTE nrofcomponents;//0X03 frame 中的成分个数 Should be 3: We encode a truecolor JPG
BYTE IdY; //0X01 frame中的成分编号为1
BYTE HVY; //0X11 水平和垂直的数据取样比为1:1 sampling factors for Y (bit 0-3 vert., 4-7 hor.)
BYTE QTY; //0X00 使用量化表0(Y信号)
BYTE IdCb; //0X02 frame中的成分编号为2
BYTE HVCb; //0X11 水平和垂直的数据取样比为1:1
BYTE QTCb; //0X01 使用量化表1(Cb信号)
BYTE IdCr; //0X03 frame中的成分编号为3
BYTE HVCr; //0X11 水平和垂直的数据取样比为1:1
BYTE QTCr; //0X01 使用量化表1(Cr信号)
} SOF0info = {0XFFC0, 0X11, 8, 0, 0, 3, 1, 0x11, 0, 2, 0x11, 1, 3, 0x11, 1};
static struct DHTinfotype{
WORD marker; //0xFFC4 DHT标记,定义Huffman表
WORD length; //0x01A2 DHT参数长度
BYTE HTYDCinfo; //高四位表示DHT的使用者:0 = DC, 1 = AC
//低四位表示使用第几个Huffman表
BYTE YDC_nrcodes[16]; //at index i = nr of codes with length i
BYTE YDC_values[12];
BYTE HTYACinfo; // = 0x10
BYTE YAC_nrcodes[16];
BYTE YAC_values[162];//we'll use the standard Huffman tables
BYTE HTCbDCinfo; // = 1
BYTE CbDC_nrcodes[16];
BYTE CbDC_values[12];
BYTE HTCbACinfo; // = 0x11
BYTE CbAC_nrcodes[16];
BYTE CbAC_values[162];
} DHTinfo;
static struct SOSinfotype {
WORD marker; //0XFFDA SOS标记,开始扫描
WORD length; //0X0C SOS参数长度
BYTE nrofcomponents; //0X03: 成分个数(1-4)
BYTE IdY; //0X01 在scan中的成分编号1
BYTE HTY; //0 在上述的成分编号下所使用的编码表编号,高四位为DC表,第四位为AC表
BYTE IdCb; //0X02 在scan中的成分编号2
BYTE HTCb; //0x11 在上述的成分编号下所使用的编码表编号,高四位为DC表,第四位为AC表
BYTE IdCr; //0X03 在scan中的成分编号3
BYTE HTCr; //0x11 在上述的成分编号下所使用的编码表编号,高四位为DC表,第四位为AC表
BYTE Ss; //Ss起始频谱选择
BYTE Se; //Se起始频谱选择(在baseline中,Ss = 0, Se = 63)
BYTE Bf; //(AH, AL),在baseline中,Ah = 0, Al = 63
} SOSinfo={0xFFDA, 12, 3, 1, 0, 2, 0x11, 3, 0x11, 0, 0x3F, 0};
typedef struct{
BYTE B, G, R;
}colorRGB;
typedef struct{
BYTE length;
WORD value;
}bitstring;
#define writebyte(b) fputc((b), fp_jpeg_stream)
#define writeword(w) writebyte(((w) >> 8) & 0XFF); writebyte((w) & 0XFF);
#define inverse_image 1 //1:编码后为倒置图像,0:编码后为正常图像
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -