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

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

?? decoder.c

?? 實現圖像的jpeg無損壓縮
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* SPMG/JPEG-LS IMPLEMENTATION V.2.1
=====================================
These programs are Copyright (c) University of British Columbia. All right 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.
-------------------------------------------------------------------------------
*/

/* decoder.c --- the main module, argument parsing, file I/O 
*
* 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 <string.h>
#include "jpegmark.h"

#define  PGMNAME PGMPREFIX "d"
#define  EPGMNAME PGMPREFIX "e"

static char *banner="\n\
					=============================================\n\
					SPMG/JPEG-LS DECOMPRESSOR " JPEGLSVERSION "\n\
					=============================================\n\
					These programs are Copyright (c) University of British Columbia.\n\
					All rights reserved. They may be freely redistributed in their\n\
					entirety provided that this copyright  notice is not removed.\n\
					They may not be sold for profit or incorporated in commercial\n\
					programs without the written permission of the copyright holder.\n\
					Each program is provided as is, without any express or implied\n\
					warranty, without even the warranty of fitness for a particular\n\
					purpose.\n\
					\n\
					=========================================================\n\
					THIS SOFTWARE IS BASED ON HP's implementation of jpeg-ls:\n\
					=========================================================\n\
					(c) COPYRIGHT HEWLETT-PACKARD COMPANY, 1995-1999.\n";

pixel *pscanline, *cscanline, *pscanl0, *cscanl0;
pixel *c_pscanline[MAX_COMPONENTS], *c_cscanline[MAX_COMPONENTS],
*c_pscanl0[MAX_COMPONENTS],	*c_cscanl0[MAX_COMPONENTS];

jpeg_ls_header *head_frame, *head_scan[MAX_SCANS];

int columns, rows, components,
samplingx[MAX_COMPONENTS], samplingy[MAX_COMPONENTS];
int c_columns[MAX_COMPONENTS], c_rows[MAX_COMPONENTS];
int whose_max_size_columns, whose_max_size_rows, number_of_scans;
int	color_mode;
int shift;				/* Shift value for sparse images */
int	got_lse;			/* got an LSE marker */
int got_table;			/* got a mapping table */
int got_restart;		/* got a restart marker indicatino */
int restart_interval;	/* the restart interval */
int multi;          /* if the files are separate */
int	application_header;	/* application bytes in the header */

int lossy;						/* Indicates if in lossy mode or not */
int bpp16;						/* Indicates if 16 bits per pixel mode or not */
int lutmax;						/* lutmax is either 256 or 4501 */




/* reset */
#ifndef FIXRESET
int	RESET;
#endif


/* alphabet size */
#ifndef FIXALPHA
int     alpha,     /* alphabet size */
ceil_half_alpha; /* ceil(alpha/2) */
#endif

#ifdef POW2
int     highmask;
#endif



/* Write one row of pixel values */
__inline void write_one_line(pixel* line, int cols, FILE* outfile)
{

	int i, index;
	unsigned int* maptable;

	/* No mapping tables used */
	if(!(head_scan[0]->need_table))
		if (bpp16==FALSE)
		{
			unsigned char* line8;
			line8 = (unsigned char*)safealloc(cols);

			for (i=0; i< cols; i++)
				*(line8+i)=ENDIAN8(*(line+i));

			fwrite(line8, sizeof(unsigned char), cols, outfile);

			free(line8);
		} else {
			fwrite(line, sizeof(short), cols, outfile);
		}

		/* Mapping tables used */
	else
	{
		if (bpp16==FALSE)
		{
			/* Write one byte per table entry */
			if (head_scan[0]->Wt == 1)
			{
				unsigned char* line8;
				line8 = (unsigned char*)safealloc(cols);	/* If don't have 2, it mallocs over the table? */

				maptable = head_scan[0]->TABLE[head_scan[0]->TID];

				for (i=0; i<cols; i++)
				{
					index = *(line+i);
					*(line8+i) = ENDIAN8(maptable[index]);
				}

				fwrite(line8, sizeof(unsigned char), cols, outfile);

				free(line8);
			}
			/* Write two bytes per table entry */
			else if (head_scan[0]->Wt == 2)
			{
				unsigned short* line16;
				line16 = (unsigned short*)safealloc(cols*2);

				maptable = head_scan[0]->TABLE[head_scan[0]->TID];

				for (i=0; i<cols; i++)
				{
					index = *(line+i);
					*(line16+i) = (unsigned short) maptable[index];
				}

				fwrite(line16, sizeof(short), cols, outfile);

				free(line16);
			}
			/* Write three bytes per table entry */
			else if (head_scan[0]->Wt == 3)
			{
				unsigned char* line8_3;
				line8_3 = (unsigned char*)safealloc(cols*3);

				maptable = head_scan[0]->TABLE[head_scan[0]->TID];

				for (i=0; i<cols; i++)
				{
					index = *(line+i);
					*(line8_3 + (i*3)) =  (unsigned char) (maptable[index] >> 16);
					*(line8_3 + (i*3) + 1) = (unsigned char) (maptable[index] >> 8);
					*(line8_3 + (i*3) + 2) = (unsigned char) (maptable[index]);
				}

				fwrite(line8_3, sizeof(char), cols*3, outfile);

				free(line8_3);
			}


			/* Can't do 16 bit index values */
		}
		else
		{
			fprintf(stderr, "Sorry, mapping tables are only supported for 8 bpp images in this implementation.\n");
			exit(0);
		}
	}


}





void initbuffers(int multi, int comp) {

	int	i;

	if (multi) 		/* Output to several files */

		for (i=0;i<comp;i++) {

			c_pscanl0[i] = (pixel *)safecalloc((c_columns[i]+LEFTMARGIN+RIGHTMARGIN), sizeof(pixel) );
			c_cscanl0[i] = (pixel *)safecalloc((c_columns[i]+LEFTMARGIN+RIGHTMARGIN), sizeof(pixel) );

			/* Adjust scan line pointers taking into account the margins,
			and also the fact that indexing for scan lines starts from 1
			*/
			c_pscanline[i] = c_pscanl0[i] + (LEFTMARGIN-1);
			c_cscanline[i] = c_cscanl0[i] + (LEFTMARGIN-1);
		}

	else {			/* Output to a single file */

		pscanl0 = (pixel *)safecalloc(components*(columns+LEFTMARGIN+RIGHTMARGIN), sizeof(pixel) );
		cscanl0 = (pixel *)safecalloc(components*(columns+LEFTMARGIN+RIGHTMARGIN), sizeof(pixel) );

		/* Adjust scan line pointers taking into account the margins,
		and also the fact that indexing for scan lines starts from 1
		(this will probably have to be changed in the future) 
		*/
		pscanline = pscanl0 + components*(LEFTMARGIN-1);
		cscanline = cscanl0 + components*(LEFTMARGIN-1);
	}

	createzeroLUT();

}

swaplines()
{
	pixel *temp;
	temp = pscanl0;
	pscanl0 = cscanl0;
	cscanl0 = temp;
	pscanline = pscanl0 + components*(LEFTMARGIN-1);
	cscanline = cscanl0 + components*(LEFTMARGIN-1);
}

c_swaplines(int i)
{
	pixel *temp;
	temp = c_pscanl0[i];
	c_pscanl0[i] = c_cscanl0[i];
	c_cscanl0[i] = temp;
	c_pscanline[i] = c_pscanl0[i] + (LEFTMARGIN-1);
	c_cscanline[i] = c_cscanl0[i] + (LEFTMARGIN-1);
}

void closebuffers(int multi) {

	int     i;

	fclose(in);
	if (multi==0)
		fclose(out);
	else
		for (i=0;i<components;i++)
			fclose(c_out[i]);

	free(pscanl0);
	free(cscanl0);
}




int initialize(int argc, char *argv[]) {
	char line[256],tmp_char[1],   
		*infilename = NULL,
		*outfilename = OUTFILE ".out",
		*c_outfilename[MAX_COMPONENTS],
		*color_mode_string;
	int i, max_samp_columns, max_samp_rows, mk, n_s,
		end_of_seek=0,
		seek_return,
		alpha0,
		gotinf = 0,
		gotoutf = 0,
		out_files=0;
	int pos;   /* position in the file, after the header */

	for (i=0;i<MAX_COMPONENTS;i++) {						// max component now is 6
		c_outfilename[i]=malloc(strlen(OUTFILE)+20);
		sprintf(c_outfilename[i],"%s%d.out",OUTFILE,i+1);	// output0.out, output1.out, output2.out
	}

	multi=1;
	for ( i=1; i<argc; i++ )
		if ( argv[i][0] == '-' )
		{
			switch ( argv[i][1] ) {

			case 'i':
				infilename  = argv[i]+2;
				gotinf = 1;
				break;

			case 'o':
				outfilename = c_outfilename[out_files++] = argv[i]+2;
				gotoutf = 1;
				break;

			case 'P':
				multi=0;
				break;

			case 'v':
				if ( sscanf(argv[i],"-v%d",&verbose) != 1 )
					verbose=2;
				break;

			default:
				usage();
	//			exit(0);
			}
		}
		else {
			if ( ! gotinf ) {
				infilename = argv[i];
				gotinf = 1;
			}
			else if ( ! gotoutf )
				outfilename = c_outfilename[out_files++] = argv[i];
		}

		if ( verbose < 1 )
			verbose = 1;  /* at least the banner will show */

		if ((!multi) && (out_files>1)) {
			fprintf(stderr,"\nERROR: Only 1 output file expected with -P option.\nThis option is valid only for line/pixel interleaved and not subsampled.\n");
			exit(10);
		}

		/* Open in file */
		if ( infilename == NULL ) {
			usage();
			exit(0);
		}
		else {
			if ( strcmp(infilename,"-")==0 )
				in = stdin;
			else if ( (in=fopen(infilename,"rb")) == NULL ) {
				perror(infilename);
				exit(10);
			}
		}

		/* Read the compressed image frame header */
		bufiinit(in);

		head_frame = (jpeg_ls_header *) safecalloc(1,sizeof(jpeg_ls_header));

		for (n_s=0;n_s<MAX_SCANS;n_s++) {
			head_scan[n_s] = (jpeg_ls_header *) safecalloc(1,sizeof(jpeg_ls_header));
			head_scan[n_s]->T1=head_scan[n_s]->T2=head_scan[n_s]->T3=0;
			head_scan[n_s]->RES = DEFAULT_RESET;
		}

		/* Read SOI */
		seek_return = seek_marker(in,&mk);
		if (seek_return == EOF) {
			fprintf(stderr,"*** Premature End of File seeking SOI\n");
			exit(10);
		}
		else {
			pos = seek_return;
			if (mk != SOI) {
				fprintf(stderr,"Marker %04x found: first marker must be SOI (%04x) in this implementation\n", mk, SOI);
				exit(10);
			}
		}

		/* Read SOF_LS */
		seek_return = seek_marker(in,&mk);
		if (seek_return == EOF) {
			fprintf(stderr,"*** Premature End of File seeking SOF_LS\n");
			exit(10);
		}
		else {
			pos += seek_return; /* Read SOF_LS */
			if (mk != SOF_LS) {
				fprintf(stderr,"Marker %04x found: second marker must be SOF_LS (%04x) in this implementation\n", mk, SOF_LS);
				exit(10);
			}
		}

		/* Read the frame header (SOF) */
		seek_return = read_jpegls_frame(in,head_frame);
		if (seek_return == EOF) {
			fprintf(stderr,"*** Premature End of File reading frame header\n");
			exit(10);
		}
		else
			pos += seek_return;

		head_scan[0]->alp = head_frame->alp;    /* default alpha */


		/* LSE Extension header */
		/* This version supports only 2 extension headers, and 1 set of
		parameters for all the scans */
		got_lse = 0;
		head_scan[0]->need_table = 0;

		while (!end_of_seek)
		{
			seek_return=seek_marker(in, &mk);
			if (seek_return == EOF) {
				fprintf(stderr,"*** Premature End of File seeking SOS or LSE marker\n");
				exit(10);
			}
			pos +=seek_return;


			switch(mk)
			{
			case LSE:
				seek_return = read_jpegls_extmarker(in, head_scan[0]);
				if (seek_return == EOF) {
					fprintf(stderr,"*** Premature End of File\n");
					exit(10);
				}
				pos += seek_return;
				got_lse = 1;
				break;

			case DRI:
				seek_return = read_jpegls_restartmarker(in, head_scan[0]);
				pos += seek_return;
				got_restart = 1;
				restart_interval = head_scan[0]->restart_interval;
				break;

			case SOS:
				end_of_seek=1;	
				break;
			}
		}
		/* End of extension header */



		/* Read the scan header*/
		seek_return = read_jpegls_scan(in,head_scan[0]);
		if (seek_return == EOF) {
			fprintf(stderr,"*** Premature End of File reading scan marker segment\n");
			exit(10);
		}
		pos+=seek_return;

		shift=head_scan[0]->shift;
		if (shift!=0) {
			fprintf(stderr,"Got shift = %d != 0 : not implemented.\n",shift);
			exit(10);
		}

		NEAR=head_scan[0]->NEAR;
		color_mode=head_scan[0]->color_mode;
		columns=head_frame->columns;
		rows=head_frame->rows;
		alpha0=head_scan[0]->alp;
		head_frame->alp = alpha0;
		components=head_frame->comp;

		if (color_mode==PLANE_INT) 
			number_of_scans=components;
		else
			number_of_scans=1;

		set_thresholds(head_scan[0]->alp, head_scan[0]->NEAR, &(head_scan[0]->T1), &(head_scan[0]->T2), &(head_scan[0]->T3));
		T1=head_scan[0]->T1;
		T2=head_scan[0]->T2;
		T3=head_scan[0]->T3;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品一区二区三区三上悠亚 | 91精品欧美福利在线观看| 日韩一区二区三区电影| 亚洲欧美日韩人成在线播放| 六月丁香婷婷色狠狠久久| 欧洲精品一区二区| 国产精品美女久久福利网站| 免费成人在线影院| 欧美少妇bbb| 亚洲精品日日夜夜| 成人午夜视频网站| 精品国产一区二区精华| 午夜成人免费视频| 欧美在线视频日韩| 亚洲免费在线电影| 97se亚洲国产综合在线| 国产精品美女久久久久av爽李琼| 极品美女销魂一区二区三区 | 在线免费不卡电影| 国产精品美女久久久久av爽李琼| 国内成人自拍视频| 精品成人一区二区三区四区| 日韩电影一区二区三区| 91精品国产日韩91久久久久久| 亚洲精品中文在线影院| 91原创在线视频| 中文字幕一区二区三区在线观看 | 在线不卡一区二区| 亚洲综合成人在线视频| 日本电影欧美片| 亚洲色图都市小说| 色哟哟日韩精品| 一区二区三区影院| 欧美日韩一区高清| 婷婷久久综合九色综合伊人色| 欧美色偷偷大香| 亚洲国产va精品久久久不卡综合| 一本大道av伊人久久综合| 亚洲欧洲综合另类| 欧美性猛片aaaaaaa做受| 一片黄亚洲嫩模| 7777精品伊人久久久大香线蕉经典版下载 | 日韩中文字幕一区二区三区| 欧美在线视频你懂得| 偷拍亚洲欧洲综合| 欧美大胆一级视频| 成人午夜激情片| 亚洲欧美综合色| 欧美午夜在线观看| 老司机免费视频一区二区| 亚洲精品一区二区三区在线观看| 国产一区二区三区视频在线播放| 国产精品青草综合久久久久99| 91美女在线视频| 三级一区在线视频先锋 | 国产在线观看免费一区| 欧美国产一区二区| 欧美日韩三级一区| 国产剧情在线观看一区二区| 中文字幕在线观看不卡| 91精品国产福利| 成人av在线看| 视频一区二区三区中文字幕| 国产欧美日韩在线| 欧美喷水一区二区| 高清av一区二区| 一区二区在线观看视频 | 亚洲欧美在线高清| 欧美日韩国产一级二级| 韩国成人福利片在线播放| 亚洲三级视频在线观看| 欧美一级理论性理论a| 福利视频网站一区二区三区| 亚洲国产视频在线| 国产精品久久久久久久久久免费看| 欧美少妇bbb| 本田岬高潮一区二区三区| 五月婷婷综合在线| 亚洲欧美国产77777| 欧美电影免费观看高清完整版在线| 91丝袜美腿高跟国产极品老师| 日本在线不卡视频| 一区二区三区精品| 国产精品色在线观看| 日韩一区二区中文字幕| 91蝌蚪porny成人天涯| 国产精品自拍在线| 日本欧美肥老太交大片| 亚洲一区二区视频在线观看| 中文字幕高清一区| 精品av综合导航| 欧美一区二区三区四区视频| 日本乱人伦aⅴ精品| 成人美女视频在线观看18| 老色鬼精品视频在线观看播放| 亚洲国产成人av网| 一区二区三区蜜桃| 亚洲黄色尤物视频| 1024成人网色www| 国产精品系列在线| 欧美激情一区二区三区全黄| 欧美精品一区二区三区四区| 日韩一级片网址| 日韩欧美国产三级| 日韩免费福利电影在线观看| 56国语精品自产拍在线观看| 欧美三级三级三级| 欧美日韩精品一区二区三区蜜桃 | 亚洲免费在线播放| 中文字幕乱码久久午夜不卡 | 日韩一区和二区| 日韩美女在线视频| 精品对白一区国产伦| 久久一区二区三区国产精品| 精品久久国产字幕高潮| 欧美sm美女调教| 国产亚洲一二三区| 国产午夜三级一区二区三| 成人欧美一区二区三区小说| 亚洲特级片在线| 一区二区三区免费观看| 午夜精品成人在线| 久久国产剧场电影| 国产成人自拍在线| 不卡av在线网| 日本精品一区二区三区四区的功能| 91视频一区二区三区| 欧美色综合网站| 精品免费日韩av| 欧美国产欧美亚州国产日韩mv天天看完整| 国产亚洲午夜高清国产拍精品| 国产精品青草综合久久久久99| 亚洲精品水蜜桃| 午夜日韩在线电影| 国产乱码精品一区二区三| 国产成人午夜电影网| 91毛片在线观看| 正在播放亚洲一区| 久久久久久久免费视频了| 1024国产精品| 日韩国产精品久久久久久亚洲| 蜜桃视频免费观看一区| 成人黄色在线视频| 欧美猛男超大videosgay| 日韩欧美国产综合一区| 国产精品欧美久久久久一区二区| 中文字幕中文在线不卡住| 亚洲成人动漫在线免费观看| 国产麻豆精品theporn| 色8久久精品久久久久久蜜| 美女视频黄久久| 久久久久久99精品| 日韩电影在线免费看| 国产一区视频在线看| 91在线国产福利| 精品少妇一区二区| 一区二区三区中文免费| 激情综合色综合久久综合| 在线欧美小视频| 国产拍揄自揄精品视频麻豆| 午夜欧美电影在线观看| 成人午夜免费av| 精品国产伦一区二区三区观看方式 | 91精品国产综合久久久久久漫画 | 中文字幕一区二区三区四区不卡 | 久久亚洲私人国产精品va媚药| 成人免费视频在线观看| 国产最新精品免费| 欧美蜜桃一区二区三区| 亚洲欧美视频在线观看视频| 久久66热re国产| 欧美一二三四在线| 午夜精品久久久久久久久| 成人午夜视频在线观看| 精品福利二区三区| 免费久久99精品国产| 精品视频免费在线| 亚洲天堂av老司机| 成人动漫一区二区三区| 久久亚洲综合色一区二区三区| 天天操天天综合网| 欧美调教femdomvk| 亚洲综合999| 91国产视频在线观看| 亚洲女人的天堂| av在线一区二区三区| 国产三区在线成人av| 狠狠v欧美v日韩v亚洲ⅴ| 日韩视频免费观看高清在线视频| 亚洲图片欧美一区| 欧美日韩mp4| 性做久久久久久免费观看| 在线精品视频小说1| 亚洲午夜久久久久久久久电影院| 色伊人久久综合中文字幕| 一卡二卡三卡日韩欧美| 欧美性大战久久久| 午夜天堂影视香蕉久久| 欧美一区二视频| 韩国理伦片一区二区三区在线播放|