亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? minijpegdec.cpp

?? About JPEG, executable on Visual C++
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/****************************************************************************
*	Author:			Dr. Tony Lin											*
*	Email:			lintong@cis.pku.edu.cn									*
*	Release Date:	Dec. 2002												*
*																			*
*	Name:			mini JPEG class, rewritten from IJG codes				*
*	Source:			IJG v.6a JPEG LIB										*
*	Purpose:		1. Readable, so reusable								*
*					2. Customized Jpeg format, with smallest overhead		*
*					3. Standard c++ types, for easily understood			*
*																			*
*	Acknowlegement:	Thanks for great IJG, and Chris Losinger				*
*																			*
*	Legal Issues:	(almost same as IJG with followings)					*
*																			*
*	1. We don't promise that this software works.							*
*	2. You can use this software for whatever you want.						*
*	You don't have to pay.													*
*	3. You may not pretend that you wrote this software. If you use it		*
*	in a program, you must acknowledge somewhere. That is, please			*
*	metion IJG, and Me, Dr. Tony Lin.										*
*																			*
*****************************************************************************/

////////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MiniJpegDec.h"


////////////////////////////////////////////////////////////////////////////////

CMiniJpegDecoder::CMiniJpegDecoder( )
{

}

CMiniJpegDecoder::~CMiniJpegDecoder( )
{
	
}

////////////////////////////////////////////////////////////////////////////////

bool CMiniJpegDecoder::GetImageInfo(	
	unsigned char *pInBuf,	//in, source data, in jpp format
	int cbInBuf,			//in, count bytes for in buffer
	int& nWidth,			//out, image width in pixels
	int& nHeight,			//out, image height
	int& nHeadSize			//out, header size in bytes
	)
{
	//	image width and height, 4 bytes
	memcpy ( &m_nWidth, pInBuf, 2 );
	pInBuf += 2;
	memcpy ( &m_nHeight, pInBuf, 2 );
	pInBuf += 2;

	//	Write quality factor, 2 byte
	memcpy ( &m_nQuality, pInBuf, 2 );
	pInBuf += 2;

	m_nDataBytes = cbInBuf - 6;

	nHeadSize = 6;

	if(( m_nWidth <= 0 )||( m_nHeight <= 0 ))
		return false;

	nWidth = m_nWidth;
	nHeight = m_nHeight;

	//	Prepare for decoding here !!!!
	InitDecoder( );

	return true;
}


////////////////////////////////////////////////////////////////////////////////
//	Prepare for all the tables needed, 
//	eg. quantization tables, huff tables, color convert tables
//	1 <= nQuality <= 100, is used for quantization scaling
//	Computing once, and reuse them again and again !!!!!!!

void CMiniJpegDecoder::InitDecoder( void )
{
	m_nGetBits = 0;
	m_nGetBuff = 0;

	m_dcY = m_dcCb = m_dcCr = 0;

	//	prepare range limiting table to limit idct outputs
	SetRangeTable( );

	//	prepare color convert table, from bgr to ycbcr
	InitColorTable( );

	//	prepare two quant tables, one for Y, and another for CbCr
	InitQuantTable( );

	//	prepare four huffman tables: 
	InitHuffmanTable( );
}


////////////////////////////////////////////////////////////////////////////////
//	prepare_range_limit_table(): Set m_tblRange[5*256+128 = 1408]
//	range table is used for range limiting of idct results
/*	On most machines, particularly CPUs with pipelines or instruction prefetch,
 *	a (subscript-check-less) C table lookup
 *			x = sample_range_limit[x];
 *	is faster than explicit tests
 *			if (x < 0)  x = 0;
 *			else if (x > MAXJSAMPLE)  x = MAXJSAMPLE;
 */

void CMiniJpegDecoder::SetRangeTable( void )
{
	unsigned char *tbl;

	//	m_tblRange[0, ..., 255], limit[x] = 0 for x < 0
	memset( m_tblRange, 0, 256 );

	//	m_tblRange[256, ..., 511], limit[x] = x
	tbl = m_tblRange + 256;
	for( int i=0; i<256; i++ )
		*(tbl++) = (unsigned char) i;

	// m_tblRange[512, ..., 895]: first half of post-IDCT table
	tbl = m_tblRange + 512;
	for (i = 128; i < 512; i++)
		*(tbl++) = 255;

	//	m_tblRange[896, ..., 1280]: Second half of post-IDCT table
	memset( m_tblRange + 896, 0, 384);

	// [1280, 1407] = [256, 384]
	memcpy( m_tblRange + 1280, m_tblRange + 256, 128);
}


////////////////////////////////////////////////////////////////////////////////

/**************** YCbCr -> RGB conversion: most common case **************/

/*
 * YCbCr is defined per CCIR 601-1, except that Cb and Cr are
 * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
 * The conversion equations to be implemented are therefore
 *	R = Y                + 1.40200 * Cr
 *	G = Y - 0.34414 * Cb - 0.71414 * Cr
 *	B = Y + 1.77200 * Cb
 * where Cb and Cr represent the incoming values less CENTERJSAMPLE.
 * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.)
 *
 * To avoid floating-point arithmetic, we represent the fractional constants
 * as integers scaled up by 2^16 (about 4 digits precision); we have to divide
 * the products by 2^16, with appropriate rounding, to get the correct answer.
 * Notice that Y, being an integral input, does not contribute any fraction
 * so it need not participate in the rounding.
 *
 * For even more speed, we avoid doing any multiplications in the inner loop
 * by precalculating the constants times Cb and Cr for all possible values.
 * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table);
 * for 12-bit samples it is still acceptable.  It's not very reasonable for
 * 16-bit samples, but if you want lossless storage you shouldn't be changing
 * colorspace anyway.
 * The Cr=>R and Cb=>B values can be rounded to integers in advance; the
 * values for the G calculation are left scaled up, since we must add them
 * together before rounding.
 */

void CMiniJpegDecoder::InitColorTable( void )
{
	int i, x;
	int nScale	= 1L << 16;		//equal to power(2,16)
	int nHalf	= nScale >> 1;

#define FIX(x) ((int) ((x) * nScale + 0.5))

	/* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
    /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */
    /* Cr=>R value is nearest int to 1.40200 * x */
	/* Cb=>B value is nearest int to 1.77200 * x */
	/* Cr=>G value is scaled-up -0.71414 * x */
	/* Cb=>G value is scaled-up -0.34414 * x */
    /* We also add in ONE_HALF so that need not do it in inner loop */
	for (i = 0, x = -128; i < 256; i++, x++) 
	{
		m_CrToR[i] = (int) ( FIX(1.40200) * x + nHalf ) >> 16;
		m_CbToB[i] = (int) ( FIX(1.77200) * x + nHalf ) >> 16;
		m_CrToG[i] = (int) (- FIX(0.71414) * x );
		m_CbToG[i] = (int) (- FIX(0.34414) * x + nHalf );
	}
}


////////////////////////////////////////////////////////////////////////////////
//	InitQuantTable will produce customized quantization table into:
//		m_tblYQuant[0..63] and m_tblCbCrQuant[0..63]

void CMiniJpegDecoder::InitQuantTable( void )
{
	// These are the sample quantization tables given in JPEG spec section K.1.
	// The spec says that the values given produce "good" quality, and
	// when divided by 2, "very good" quality.	

	static unsigned short std_luminance_quant_tbl[64] = 
	{
			16,  11,  10,  16,  24,  40,  51,  61,
			12,  12,  14,  19,  26,  58,  60,  55,
			14,  13,  16,  24,  40,  57,  69,  56,
			14,  17,  22,  29,  51,  87,  80,  62,
			18,  22,  37,  56,  68, 109, 103,  77,
			24,  35,  55,  64,  81, 104, 113,  92,
			49,  64,  78,  87, 103, 121, 120, 101,
			72,  92,  95,  98, 112, 100, 103,  99
	};
	static unsigned short std_chrominance_quant_tbl[64] = 
	{
			17,  18,  24,  47,  99,  99,  99,  99,
			18,  21,  26,  66,  99,  99,  99,  99,
			24,  26,  56,  99,  99,  99,  99,  99,
			47,  66,  99,  99,  99,  99,  99,  99,
			99,  99,  99,  99,  99,  99,  99,  99,
			99,  99,  99,  99,  99,  99,  99,  99,
			99,  99,  99,  99,  99,  99,  99,  99,
			99,  99,  99,  99,  99,  99,  99,  99
	};


	/*  For AA&N IDCT method, divisors are equal to quantization
	*	coefficients scaled by scalefactor[row]*scalefactor[col], where
	*		scalefactor[0] = 1
	*		scalefactor[k] = cos(k*PI/16) * sqrt(2)    for k=1..7
	*	We apply a further scale factor of 8.
	*/	
	static unsigned short aanscales[64] = {
			/* precomputed values scaled up by 14 bits */
			16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
			22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
			21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
			19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
			16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
			12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
			 8867, 12299, 11585, 10426,  8867,  6967,  4799,  2446,
			 4520,  6270,  5906,  5315,  4520,  3552,  2446,  1247
	};
	
	// Safety checking. Convert 0 to 1 to avoid zero divide. 
	m_nScale = m_nQuality;
	if (m_nScale <= 0) 
		m_nScale = 1;
	if (m_nScale > 100) 
		m_nScale = 100;
	
	//	Non-linear map: 1->5000, 10->500, 25->200, 50->100, 75->50, 100->0
	if (m_nScale < 50)
		m_nScale = 5000 / m_nScale;
	else
		m_nScale = 200 - m_nScale*2;

	//	Scale the Y and CbCr quant table, respectively
	ScaleQuantTable( m_qtblY,	 std_luminance_quant_tbl, aanscales );
	ScaleQuantTable( m_qtblCbCr, std_chrominance_quant_tbl, aanscales );
}

////////////////////////////////////////////////////////////////////////////////

void CMiniJpegDecoder::ScaleQuantTable(
			unsigned short* tblRst,		//result quant table
			unsigned short* tblStd,		//standard quant table
			unsigned short* tblAan		//scale factor for AAN dct
			)
{
	int i, temp, half = 1<<11;

	for (i = 0; i < 64; i++) 
	{
		// (1) user scale up
		temp = (int)(( m_nScale * tblStd[i] + 50 ) / 100 );

		// limit to baseline range 
		if (temp <= 0) 
			temp = 1;
		if (temp > 255)
			temp = 255;		

		// (2) scaling needed for AA&N algorithm
		tblRst[i] = (unsigned short)(( temp * tblAan[i] + half ) >> 12 );
	}
}


////////////////////////////////////////////////////////////////////////////////
//	Prepare four Huffman tables:
//		HUFFMAN_TABLE m_htblYDC, m_htblYAC, m_htblCbCrDC, m_htblCbCrAC;

void CMiniJpegDecoder::InitHuffmanTable( void )
{
	//	Y dc component
	static unsigned char bitsYDC[17] =
    { 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
	static unsigned char valYDC[] =
    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };	

	//	CbCr dc
	static unsigned char bitsCbCrDC[17] =
    { 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
	static unsigned char valCbCrDC[] =
    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };	

	//	Y ac component
	static unsigned char bitsYAC[17] =
    { 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
	static unsigned char valYAC[] =
    { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
	0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
	0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
	0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
	0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
	0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
	0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
	0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
	0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
	0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
	0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
	0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
	0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
	0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
	0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
	0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
	0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
	0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
	0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
	0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
	0xf9, 0xfa };	

	//	CbCr ac
	static unsigned char bitsCbCrAC[17] =
    { 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 };
	static unsigned char valCbCrAC[] =
    { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
	0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
	0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
972aa.com艺术欧美| 中文字幕 久热精品 视频在线 | 亚洲精品伦理在线| 国产区在线观看成人精品| 日韩午夜av电影| 91精品婷婷国产综合久久| 欧美日韩成人一区二区| 欧美日韩国产色站一区二区三区| 欧美在线观看你懂的| 欧美自拍偷拍午夜视频| 欧美日韩色综合| 91精品国产综合久久久蜜臀粉嫩| 欧美日韩极品在线观看一区| 制服丝袜亚洲色图| 欧美成人女星排行榜| 欧美成人乱码一区二区三区| 久久久不卡网国产精品一区| 国产精品免费视频观看| 亚洲私人影院在线观看| 香蕉加勒比综合久久| 毛片基地黄久久久久久天堂| 久久99久久精品欧美| 成人免费视频caoporn| 一本大道综合伊人精品热热| 欧美午夜在线观看| 欧美大片一区二区三区| 国产无遮挡一区二区三区毛片日本| 中文字幕乱码久久午夜不卡| 亚洲一二三四久久| 久久国产精品99久久久久久老狼| 国产成人aaa| 欧美视频一区二区三区| 久久久影视传媒| 樱花草国产18久久久久| 国产一区视频网站| 欧美优质美女网站| 精品999在线播放| 亚洲精品乱码久久久久久| 七七婷婷婷婷精品国产| 99re这里都是精品| 日韩欧美一区电影| 一区二区三区中文字幕电影| 美腿丝袜亚洲三区| 色婷婷久久综合| 日韩精品一区二区在线观看| 国产精品久久久久久福利一牛影视 | 欧美性色黄大片手机版| 日韩一级大片在线观看| 亚洲蜜臀av乱码久久精品| 黄色日韩网站视频| 在线播放中文字幕一区| 亚洲人成人一区二区在线观看 | 日本高清免费不卡视频| 欧美精品一区二| 亚洲成av人片观看| 9色porny自拍视频一区二区| 精品国产一区二区在线观看| 亚洲国产你懂的| 91碰在线视频| 国产精品午夜久久| 国产精品综合一区二区三区| 4hu四虎永久在线影院成人| 亚洲欧美色图小说| 成人黄色软件下载| 久久婷婷久久一区二区三区| 日日嗨av一区二区三区四区| 欧美在线高清视频| 亚洲精品综合在线| 91毛片在线观看| 国产精品入口麻豆九色| 成人综合婷婷国产精品久久免费| 精品久久久久香蕉网| 麻豆国产欧美日韩综合精品二区| 欧美午夜精品久久久久久孕妇| 亚洲免费视频中文字幕| 99热这里都是精品| 亚洲日本一区二区三区| 色综合久久久久久久久久久| 国产精品卡一卡二卡三| 不卡的电视剧免费网站有什么| 国产欧美日韩精品一区| 国产成人精品一区二区三区四区 | 久久精品国产一区二区三区免费看| 欧美日韩免费一区二区三区| 亚洲一区二区三区视频在线| 欧美性受xxxx黑人xyx性爽| 一级日本不卡的影视| 欧美日韩国产综合一区二区三区| 亚洲国产va精品久久久不卡综合| 欧美精品日韩一本| 日韩国产成人精品| 久久日一线二线三线suv| 国产91丝袜在线播放| 亚洲手机成人高清视频| 在线日韩一区二区| 免费视频一区二区| 国产亚洲精品久| 91视频国产资源| 视频在线观看一区| 欧美xxxxxxxx| 99九九99九九九视频精品| 有坂深雪av一区二区精品| 91精品国产美女浴室洗澡无遮挡| 狠狠色丁香九九婷婷综合五月| 日本一区二区三区在线观看| 色偷偷久久人人79超碰人人澡| 图片区小说区区亚洲影院| 欧美成人一区二区三区在线观看| 成人午夜精品一区二区三区| 一区二区三区四区五区视频在线观看 | 欧美mv日韩mv国产网站| 国产成a人无v码亚洲福利| 亚洲人吸女人奶水| 欧美sm极限捆绑bd| 欧美在线观看一二区| 国产黄色精品网站| 无码av中文一区二区三区桃花岛| 久久久国产一区二区三区四区小说 | 麻豆高清免费国产一区| 亚洲女人的天堂| 久久免费视频一区| 91精品国产色综合久久ai换脸 | 久久久天堂av| 欧美乱妇20p| 日本道在线观看一区二区| 国产中文一区二区三区| 亚洲电影欧美电影有声小说| 久久久久久久综合狠狠综合| 色呦呦国产精品| 日本欧美韩国一区三区| 亚洲在线观看免费视频| 亚洲精品一区二区三区99| 91一区二区在线| 免费日韩伦理电影| 亚洲女人的天堂| 久久久一区二区三区捆绑**| 欧美丝袜丝nylons| 蜜臀av一级做a爰片久久| 一级日本不卡的影视| 中文乱码免费一区二区| 宅男在线国产精品| 色综合天天综合网天天看片| 粉嫩嫩av羞羞动漫久久久| 亚洲成人av电影| 中文字幕一区不卡| 精品久久国产字幕高潮| 欧美丝袜丝nylons| 色综合天天视频在线观看| 国产乱妇无码大片在线观看| 精品系列免费在线观看| 一区二区三区四区蜜桃| 欧美国产精品专区| 精品日韩av一区二区| 亚洲精品在线观看网站| 7777精品伊人久久久大香线蕉经典版下载 | 91丨九色porny丨蝌蚪| 国产精品一区二区男女羞羞无遮挡 | 欧美一级艳片视频免费观看| 色哦色哦哦色天天综合| 成人免费毛片aaaaa**| 黑人精品欧美一区二区蜜桃 | 欧美三区在线视频| 99精品国产99久久久久久白柏| 激情综合网最新| 亚洲bt欧美bt精品777| 亚洲成av人片一区二区三区| 亚洲在线免费播放| 亚洲午夜免费福利视频| 亚洲一区二区不卡免费| 日韩美女精品在线| 亚洲一区二区三区视频在线| 亚洲国产日产av| 亚洲午夜三级在线| 中文字幕一区二区三区不卡| 亚洲精品免费看| 午夜伦欧美伦电影理论片| 亚洲一区二区成人在线观看| 136国产福利精品导航| 亚洲一区二区免费视频| 亚洲一区中文日韩| 午夜久久久久久久久| 亚洲大片精品永久免费| 精一区二区三区| 黄页视频在线91| 成a人片国产精品| 国产精品自产自拍| 色国产综合视频| 欧美顶级少妇做爰| 精品国产一区二区三区久久影院| 91精品福利在线一区二区三区 | 午夜亚洲福利老司机| 激情欧美日韩一区二区| 成人av在线资源网站| 在线观看日韩毛片| 日韩欧美亚洲一区二区| 一区二区三区在线免费观看 | 99久久精品国产导航| 日本道免费精品一区二区三区| 色天天综合久久久久综合片| 国产日韩精品一区二区浪潮av|