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

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

?? jpegmark.c

?? 實現圖像的jpeg無損壓縮
?? C
字號:
/* SPMG/JPEG-LS IMPLEMENTATION V.2.1
=====================================
These programs are Copyright (c) University of British Columbia. All rights reserved.
They may be freely redistributed in their entirety provided that this copyright
notice is not removed.  THEY MAY NOT BE SOLD FOR PROFIT OR INCORPORATED IN
COMMERCIAL PROGRAMS WITHOUT THE WRITTEN PERMISSION OF THE COPYRIGHT HOLDER.
Each program is provided as is, without any express or implied warranty,
without even the warranty of fitness for a particular purpose.

=========================================================
THIS SOFTWARE IS BASED ON HP's implementation of jpeg-ls:
=========================================================

LOCO-I/JPEG-LS IMPLEMENTATION V.0.90
-------------------------------------------------------------------------------
(c) COPYRIGHT HEWLETT-PACKARD COMPANY, 1995-1999.
HEWLETT-PACKARD COMPANY ("HP") DOES NOT WARRANT THE ACCURACY OR
COMPLETENESS OF THE INFORMATION GIVEN HERE.  ANY USE MADE OF, OR
RELIANCE ON, SUCH INFORMATION IS ENTIRELY AT USER'S OWN RISK.
BY DOWNLOADING THE LOCO-I/JPEG-LS COMPRESSORS/DECOMPRESSORS
("THE SOFTWARE") YOU AGREE TO BE BOUND BY THE TERMS AND CONDITIONS
OF THIS LICENSING AGREEMENT.
YOU MAY DOWNLOAD AND USE THE SOFTWARE FOR NON-COMMERCIAL PURPOSES
FREE OF CHARGE OR FURTHER OBLIGATION.  YOU MAY NOT, DIRECTLY OR
INDIRECTLY, DISTRIBUTE THE SOFTWARE FOR A FEE, INCORPORATE THIS
SOFTWARE INTO ANY PRODUCT OFFERED FOR SALE, OR USE THE SOFTWARE
TO PROVIDE A SERVICE FOR WHICH A FEE IS CHARGED.
YOU MAY MAKE COPIES OF THE SOFTWARE AND DISTRIBUTE SUCH COPIES TO
OTHER PERSONS PROVIDED THAT SUCH COPIES ARE ACCOMPANIED BY
HEWLETT-PACKARD'S COPYRIGHT NOTICE AND THIS AGREEMENT AND THAT
SUCH OTHER PERSONS AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT.
THE SOFTWARE IS NOT OF PRODUCT QUALITY AND MAY HAVE ERRORS OR DEFECTS.
THE JPEG-LS STANDARD IS STILL UNDER DEVELOPMENT. THE SOFTWARE IS NOT A
FINAL OR FULL IMPLEMENTATION OF THE STANDARD.  HP GIVES NO EXPRESS OR
IMPLIED WARRANTY OF ANY KIND AND ANY IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR PURPOSE ARE DISCLAIMED.
HP SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL,
OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE.
-------------------------------------------------------------------------------
*/

/* jpegmark.c --- for JPEG markers
*
* Initial code by Alex Jakulin,  Aug. 1995
*
* Modified and optimized: Gadiel Seroussi, October 1995
*
* Color Enhancement: Guillermo Sapiro, August 1996
*
* Modified and added Restart marker and input tables by:
* David Cheng-Hsiu Chu, and Ismail R. Ismail march 1999
*/


#include <stdio.h>
#include "global.h"
#include "jpegmark.h"



#ifdef BUFINPUT
#   include "bitio.h"
#else
#   define	mygetc(in)	(getc(in))     
#   define 	myfeof(in)	(feof(in))
#endif

void
check_range(int param, char *name, int low, int high)
{
	if ( param < low || param > high ) {
		fprintf(stderr,"Allowed range for %s is [%d..%d]: got %d\n",
			name, low, high, param);
		exit(10);
	}
}

/*
*
*   Marker output functions
*
*/

int
write_n_bytes(FILE *out, int value, int n)
{

	int	l;


	if (n>4)  {
		fprintf(stderr,"write_n_bytes: Only 32 bits variables supported.\n");
		exit(10);
	}


#ifdef BIG_ENDIAN
	for (l=n-1;l>=0;l--)  {
		if ( putc((value>>(8*l))&0x000000FF,out) == EOF )
			return EOF;
	}
#else  /* little endian */
	for (l=0;l<n;l++) {
		if ( putc((value&0x000000FF),out) == EOF )
			return EOF;
		value >>= 8;
	}
#endif
	return n;

}

int
write_2_bytes(FILE *out, int value)
{
	return write_n_bytes(out,value,2);
}

int
write_marker(FILE *out, int marker)
/* Write a two-byte marker (just the marker identifier) */
{
	write_n_bytes(out, marker, 2);
	return 2;
}

int
write_jpegls_frame(FILE *out, jpeg_ls_header *jp)
{
	int i, marker_len,
		bpp, ct = 0;

	ct += write_marker(out, SOF_LS);   /* write JPEG-LS frame marker */

	check_range(jp->comp, "frame components", 1, 255);
	marker_len = 8 + 3*jp->comp;

	ct += write_n_bytes(out, marker_len, 2); /* write marker length */

	for ( bpp=1; (1L<<bpp)<jp->alp; bpp++ );

	ct += write_n_bytes(out, bpp, 1);        /* write bits/sample */

	/* current implementation only supports up to 64K samples in 
	either direction. Also, they must be specified in the frame header  */
	check_range(jp->rows, "rows", 1, 65535);
	check_range(jp->columns, "columns", 1, 65535);

	ct += write_n_bytes(out, jp->rows, 2);     /* write number of rows */
	ct += write_n_bytes(out, jp->columns, 2);  /* write number of cols */

	ct += write_n_bytes(out, jp->comp, 1);

	/* now write a triplet of bytes per component */
	for ( i=0; i<jp->comp; i++ ) {
		int sx = jp->samplingx[i], 
			sy = jp->samplingy[i];

		check_range(sx,"sampling(x)",1,4);
		check_range(sy,"sampling(y)",1,4);
		ct += write_n_bytes(out, jp->comp_ids[i], 1); /* component identifier */
		ct += write_n_bytes(out, (sx<<4)|sy, 1);  /* sampling rates */
		ct += write_n_bytes(out, 0, 1);    /* Tq unused */
	}
	return ct;
}

int
write_jpegls_scan(FILE *out, jpeg_ls_header *jp)
{
	int i, marker_len, ct=0;

	ct += write_marker(out, SOS);   /* write JPEG-LS scan marker */

	check_range(jp->comp, "scan components", 1, 4);

	if ( jp->comp == 1 && jp->color_mode != PLANE_INT) {
		fprintf(stderr,"Interleave for 1 component must be PLANE_INT: got %d\n",
			jp->color_mode);
		exit(10);
	}

	if ( jp->comp >1 && jp->color_mode == 0 ) {
		fprintf(stderr,"Interleave for multi-component scan must be nonzero: got %d\n",
			jp->color_mode);
		exit(10);
	}

	marker_len = 6 + 2*jp->comp;

	ct += write_n_bytes(out, marker_len, 2); /* write marker length */
	ct += write_n_bytes(out, jp->comp, 1);   /* # of components for the scan */

	/* write 2 bytes per component */
	for ( i=0; i<jp->comp; i++ ) {
		ct += write_n_bytes(out, jp->comp_ids[i], 1); /* component identifier */
		ct += write_n_bytes(out, 0, 1);   /* no tables in this implementation */
	}

	check_range(jp->NEAR, "NEAR", 0, 255);
	ct += write_n_bytes(out, jp->NEAR, 1);

	check_range(jp->color_mode,"INTERLEAVE", 0, 2);
	ct += write_n_bytes(out, jp->color_mode, 1);

	check_range(jp->shift, "SHIFT", 0, 15);
	ct += write_n_bytes(out, jp->shift, 1);

	return ct;
}


int
write_jpegls_extmarker(FILE *out, jpeg_ls_header *jp)
{
	int marker_len, ct=0;

	ct += write_marker(out, LSE);   /* write JPEG-LS extended marker id */

	ct += write_n_bytes(out, 13, 2); /* marker length */
	ct += write_n_bytes(out,  LSE_PARAMS, 1); /* ext marker id */
	ct += write_n_bytes(out, jp->alp-1, 2);  /* MAXVAL */
	ct += write_n_bytes(out, jp->T1, 2); 
	ct += write_n_bytes(out, jp->T2, 2); 
	ct += write_n_bytes(out, jp->T3, 2); 
	ct += write_n_bytes(out, jp->RES, 2);
	return ct;
}


/*
*
*   Marker input functions
*
*/

/* A.1 Coding parameters and compressed image data pp.16 */

int seek_marker(FILE *in, int *mkp )
/* Seeks a marker in the input stream. Returns the marker head, or EOF */
{
	int c, c2, ct=0;
	while ( (c=mygetc(in)) != EOF ) {
		ct ++;
		if ( c == 0xFF ) {
			if ( (c2=mygetc(in)) == EOF )
				return EOF;
			ct ++;
			if ( c2 & 0x80 ) {
				*mkp = (c<<8)|c2;
				return ct;
			}
		}
	}
	return EOF;
}


unsigned int
read_n_bytes(FILE *in, int n)
/* reads n bytes (0 <= n <= 4) from the input stream */
{
	unsigned int m = 0;
	int i;

	for ( i=0; i<n; i++ )
		m = (m << 8) | mygetc(in);
	return m;

}

int
read_marker(FILE *in, int *mkp)
/* reads a marker from the next two bytes in the input stream */
{
	unsigned int m, ct=0;

	m = read_n_bytes(in, 2);
	if ( feof(in) ) return EOF;
	if ( (m & 0xFF00) != 0xFF00 )  {
		fprintf(stderr,"read_marker: Expected marker, got %04x\n",m);
		exit(10);
	}
	*mkp = m;
	return 2;
}

int
read_jpegls_frame(FILE *in, jpeg_ls_header *jp)
/* reads the JPEG-LS frame marker (not including marker head) */
{
	int i,
		marker_len,
		bpp,
		tq,
		comp,
		ct = 0;

	/* Read Marker Length */
	marker_len = read_n_bytes(in, 2);
	ct += 2;

	/* Read the bits per pixel */
	bpp = read_n_bytes(in, 1);
	ct ++;

	check_range(bpp,"bpp",2,16);
	jp->alp = 1<<bpp;

	/* Read the rows and columns */
	jp->rows = read_n_bytes(in, 2);
	ct += 2;
	jp->columns = read_n_bytes(in, 2);
	ct += 2;

	/* Read component information */
	comp = read_n_bytes(in, 1);
	ct += 1;
	check_range(comp,"COMP",1,255);
	jp->comp = comp;

	for ( i=0; i<comp; i++ ) 
	{
		int sx, sy, cid;

		cid = read_n_bytes(in, 1);
		ct += 1;
		sx = read_n_bytes(in, 1);
		ct += 1;
		tq = read_n_bytes(in, 1);
		ct += 1;
		check_range(tq,"Tq",0,0);
		sy = sx & 0x0f;
		sx >>= 4;
		check_range(sx, "sampling(x)", 1, 4);
		check_range(sy, "sampling(y)", 1, 4);
		jp->samplingx[i] = sx;
		jp->samplingy[i] = sy;
		jp->comp_ids[i] = cid;
	}

	/* Check for errors */
	if ( myfeof(in) ) 
	{
		fprintf(stderr,"read_jpegls_frame: EOF while reading frame marker\n");
		return EOF;
	}
	if ( marker_len != 8 + 3*comp ) 
	{
		fprintf(stderr,"read_jpegls_frame: inconsistent marker length: expected %d, got %d\n",marker_len, 8 + 3*comp);
		exit(10);
	}

	return ct;
}



/* reads the JPEG-LS scan marker (not including marker head) */
int read_jpegls_scan(FILE *in, jpeg_ls_header *jp)
{
	int i, marker_len,
		comp, ct=0;


	marker_len = read_n_bytes(in, 2);
	ct += 2;

	comp = read_n_bytes(in, 1);
	ct += 1;
	check_range(comp, "scan components", 1, 4);

	jp->comp = comp;

	/* read 2 bytes per component */
	for ( i=0; i<comp; i++ ) {
		int cid, tm;

		cid = read_n_bytes(in, 1); /* component identifier */
		ct += 1;
		tm = read_n_bytes(in, 1);  /* table identifier */
		ct += 1;

		if ( tm ) {
			fprintf(stderr,"read_jpegls_scan: found nonzero table identifier, not supported\n");
			exit(10);
		}
		jp->comp_ids[i] = cid;
	}

	jp->NEAR = read_n_bytes(in, 1);
	ct += 1;
	check_range(jp->NEAR,"NEAR", 0, 255);

	jp->color_mode = read_n_bytes(in, 1);
	ct += 1;
	check_range(jp->color_mode, "INTERLEAVE", 0, 2);

	if ( jp->comp == 1 && jp->color_mode != 0 ) {
		/*
		fprintf(stderr,"Interleave for 1 component must be 0: got %d\n",
		jp->color_mode);
		*/

		/* ignore interleave value, set to 0 */
		jp->color_mode = 0;
	}

	if ( jp->comp >1 && jp->color_mode == 0 ) {
		fprintf(stderr,"Interleave for multi-component scan must be nonzero: got %d\n",
			jp->color_mode);
		exit(10);
	}


	jp->shift = read_n_bytes(in, 1);
	ct += 1;
	check_range(jp->shift, "SHIFT", 0, 15);

	if ( myfeof(in) ) {
		fprintf(stderr,"read_jpegls_scan: EOF while reading frame marker\n");
		return EOF;
	}
	if ( marker_len != 6 + 2*comp ) {
		fprintf(stderr,"read_jpegls_scan: inconsistent marker length: expected %d, got %d\n",marker_len, 6 + 2*comp);
		exit(10);
	}
	return ct;
}



/* reads the JPEG-LS extension marker (not including marker head) */
/* Supports non-default type (1) and mapping table type (2) */
int read_jpegls_extmarker(FILE *in, jpeg_ls_header *jp)

{
	int marker_len,		/* marker length */
		maxval,			/* max value */
		T1, T2, T3,		/* thresholds */
		ct = 0;			
	int IDtype;			/* LSE type */
	int TID;			/* table ID */
	int Wt;				/* width of each table entry */
	int MAXTAB;			/* maximum table index */
	int i;


	/* Read marker length */
	marker_len = read_n_bytes(in, 2); /* marker length */
	ct += 2;

	/* Read id type */
	IDtype = read_n_bytes(in,  1);
	ct += 1;


	/* For Type 1 - non default parameters */
	if (IDtype == LSE_PARAMS)
	{
		if ( marker_len != 13 ) 
		{
			fprintf(stderr,"read_jpegls_extmarker: bad marker length %d\n",marker_len);
			exit(10);
		}

		/* read maxval */
		maxval = read_n_bytes(in, 2);
		ct += 2;
		jp->alp = maxval +1;

		/* read thresholds and reset */
		jp->T1 = read_n_bytes(in, 2);
		ct += 2;
		jp->T2 = read_n_bytes(in, 2);
		jp->T3 = read_n_bytes(in, 2);
		jp->RES = read_n_bytes(in, 2);
		ct += 6;

		if ( myfeof(in) ) {
			fprintf(stderr,"read_jpegls_extmarker: EOF while reading frame marker\n");
			return EOF;
		}

		return ct;
	}

	/* For Type 2 - mapping table */
	if (IDtype == LSE_MAPTABLE)
	{

		/* Indicate table used */
		jp->need_table = 1;

		/* Read table ID */
		jp->TID = TID = read_n_bytes(in, 1);
		ct += 1;

		/* Read width of table entry */
		jp->Wt = Wt = read_n_bytes(in, 1);
		if (Wt<=0 || Wt>3)
		{	
			fprintf(stderr, "Width of mapping table entries must be either 1,2 or 3 in this implementation. Sorry!\n");
			exit(0);
		}
		ct += 1;

		/* Calculate value of MAXTAB */
		jp->MAXTAB = MAXTAB = ((marker_len - 5) / Wt) - 1;

		/* Get table entries */
		jp->TABLE[TID] = (unsigned int *)safecalloc((MAXTAB+1)*sizeof(int), 1);
		for (i=0; i<=MAXTAB; i++)
		{
			jp->TABLE[TID][i] = read_n_bytes(in, Wt);
		}
		ct += ((MAXTAB+1) * Wt);

		return ct;
	}

	/* Non supported types */

	fprintf(stderr, "LSE marker type %i not supported in this implementation.\n", IDtype);
	exit(0);

}





/* Read DRI restart marker */
int read_jpegls_restartmarker(FILE *in, jpeg_ls_header *jp)
{
	int ct = 0;
	int marker_len;		/* the marker length */
	int Ri;				/* the restart interval */

	/* Read marker length */
	marker_len = read_n_bytes(in, 2);
	ct += 2;

	/* Read the restart interval */
	Ri = read_n_bytes(in, marker_len - 2);
	ct += (marker_len - 2);

	jp->restart_interval = Ri;

	return ct;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久黑人| 91一区二区三区在线播放| 国产不卡在线一区| 欧美精品在线视频| 亚洲免费在线观看| 国产精品自拍av| 欧美一区二区三区在线观看视频 | 亚洲一区欧美一区| 国产suv精品一区二区6| 日韩精品一区在线观看| 亚洲一二三区在线观看| av不卡免费在线观看| 久久综合九色综合欧美就去吻| 一区二区三区国产豹纹内裤在线| 国产一二精品视频| 日韩亚洲欧美在线观看| 视频在线在亚洲| 欧美日韩亚洲综合| 亚洲一区二区三区在线| 91豆麻精品91久久久久久| 国产精品沙发午睡系列990531| 国产在线一区观看| 精品成人免费观看| 国内精品久久久久影院薰衣草 | 精品av综合导航| 美女被吸乳得到大胸91| 日韩一区二区三区四区| 蜜臀精品一区二区三区在线观看 | 色菇凉天天综合网| 亚洲欧美一区二区三区国产精品| 成人h动漫精品一区二| 国产精品乱人伦中文| 成人黄色片在线观看| 亚洲欧洲av另类| 色婷婷久久一区二区三区麻豆| 亚洲婷婷国产精品电影人久久| 99久久精品久久久久久清纯| 亚洲日本va午夜在线影院| 成人午夜精品在线| 亚洲日本乱码在线观看| 欧美午夜影院一区| 蜜臀va亚洲va欧美va天堂| 精品久久久久久无| 国产成人综合亚洲网站| 国产精品不卡在线| 欧美日韩一二三区| 久久精品免费看| 欧美激情综合网| 一本一道久久a久久精品| 亚洲精品中文在线| 日韩欧美视频一区| 国产999精品久久久久久| 国产精品国产三级国产a| 欧美日韩精品一区二区三区四区 | 亚洲高清免费一级二级三级| 欧美一区二区三区视频免费播放| 美女看a上一区| 国产日产欧美一区二区视频| 91福利社在线观看| 男男gaygay亚洲| 国产女主播视频一区二区| 91影视在线播放| 免费人成精品欧美精品| 欧美高清在线精品一区| 欧美三级电影网站| 国产精品性做久久久久久| 亚洲人成精品久久久久| 日韩一级片在线观看| 96av麻豆蜜桃一区二区| 日本午夜一本久久久综合| 日本一二三不卡| 91精品国产色综合久久不卡电影| 成人午夜免费av| 蜜桃视频免费观看一区| 自拍偷拍国产精品| 2021国产精品久久精品| 欧美色网站导航| 国产成人午夜精品5599| 午夜视频在线观看一区二区| 日本一区二区三区视频视频| 欧美一区二区三区在线看| 一本大道综合伊人精品热热 | 国产亚洲精品福利| 欧洲一区二区av| 国产suv精品一区二区883| 蜜臀久久99精品久久久久久9| 亚洲日本在线看| 中文字幕欧美三区| 精品理论电影在线观看| 欧美精选在线播放| 色婷婷久久久综合中文字幕 | 欧美羞羞免费网站| 高清成人免费视频| 激情六月婷婷综合| 免费高清在线一区| 丝袜亚洲另类丝袜在线| 亚洲综合一区在线| 国产亚洲一区二区三区四区| 精品国产一区二区三区久久久蜜月 | 99国内精品久久| 国产91精品一区二区麻豆亚洲| 蜜臀av亚洲一区中文字幕| 一区二区激情小说| 亚洲免费观看在线视频| 国产精品天天摸av网| 日韩一区二区在线观看视频播放| 欧美日韩国产另类一区| 欧美午夜精品久久久久久超碰 | caoporen国产精品视频| 国产激情精品久久久第一区二区| 狠狠狠色丁香婷婷综合激情| 日本vs亚洲vs韩国一区三区| 青青青爽久久午夜综合久久午夜| 午夜影院久久久| 午夜精品久久久| 欧美a一区二区| 久久99精品久久久久| 精品一区二区三区免费视频| 久久99久久久欧美国产| 麻豆成人av在线| 国产一区二区三区免费播放| 久久国产三级精品| 国产一区三区三区| 国产成a人亚洲| a4yy欧美一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 9i看片成人免费高清| 色狠狠桃花综合| 欧美日韩一区二区三区在线 | 久久精品久久99精品久久| 免费看日韩精品| 国产一区二区三区久久悠悠色av| 国产大陆a不卡| 色婷婷综合久久久中文一区二区 | 91久久香蕉国产日韩欧美9色| 91美女精品福利| 欧美日本高清视频在线观看| 日韩情涩欧美日韩视频| 国产欧美精品一区二区色综合朱莉 | 一本一本久久a久久精品综合麻豆| 一本在线高清不卡dvd| 91精品国产91久久综合桃花| 精品美女一区二区三区| 亚洲欧洲日产国码二区| 日韩电影在线看| 国产一区二区在线观看视频| 99国产精品久久久久久久久久| 欧美视频日韩视频| 国产亚洲欧美激情| 亚洲五码中文字幕| 狠狠狠色丁香婷婷综合久久五月| 91视频观看免费| 欧美一区二区三级| 国产精品国产自产拍高清av| 日韩二区在线观看| 91在线观看地址| 精品国产伦理网| 亚洲国产成人tv| av欧美精品.com| 日韩欧美久久久| 一区二区三区av电影| 国产毛片精品视频| 欧美另类z0zxhd电影| 国产亚洲人成网站| 日韩va欧美va亚洲va久久| gogogo免费视频观看亚洲一| 欧美不卡一区二区| 日韩精品一级中文字幕精品视频免费观看 | 亚洲乱码一区二区三区在线观看| 精品一区二区免费视频| 色偷偷久久一区二区三区| 久久亚洲精品小早川怜子| 亚洲成人动漫精品| 懂色av一区二区在线播放| 欧美一级搡bbbb搡bbbb| 亚洲综合无码一区二区| 成人性色生活片| 欧美成人免费网站| 亚洲午夜电影在线观看| 成人污污视频在线观看| 久久影院视频免费| 极品少妇xxxx精品少妇| 91精品免费观看| 亚洲成人先锋电影| 精品视频免费在线| 亚洲最大成人网4388xx| 色菇凉天天综合网| 日韩理论片在线| av不卡在线播放| 最新成人av在线| 色综合久久66| 亚洲精品成a人| 91麻豆免费看| 亚洲美女视频一区| 在线观看区一区二| 亚洲国产va精品久久久不卡综合| 日本乱人伦一区| 亚洲高清在线精品| 7777精品伊人久久久大香线蕉的 | 一级做a爱片久久|