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

📄 jpegheader.h

📁 这是一个JPEG程序
💻 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 + -