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

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

?? cdf.c

?? 一個簡單而且快速的無損壓縮算法。包含源代碼實現
?? C
字號:
/* program do kompresji - dekompresji obrazow */

#include "cdftypes.h"
#include "taskparams.h"
#include "cdfcmdline.h"
#include "exitit.h"
#include "cdfpred.h"
#include "cfamily.h"
#include "cdfstat.h"
#include "headers.h"
#include "bigendian.h"
#include "clalloc.h"

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void decompression(FILE *infile, FILE *outfile)
{
	int fileBYTESpp;
	BYTE *filerow, *compressedrow;
	int compressedrowlen=4*(width+1);
	int eof=0;
	PIXEL context, *prevrow, *currow, *decorelatedrow;
	int row;
	struct bitinstatus bs;		/* struktura stanu dla wejscia bitowego */

	if (bpp<9)
		fileBYTESpp=1;
	else 
		fileBYTESpp=2;

	context=0;

	if (!(compressedrow=(BYTE *)clamalloc(compressedrowlen)))
		exitit("error compressedrow buffer allocation", 4);
	if (!(filerow=(BYTE *)clamalloc(width*fileBYTESpp)))
		exitit("error filerow buffer allocation", 4);
	if (!(prevrow=(PIXEL *)clamalloc(width*sizeof(PIXEL))))
		exitit("error pervrow buffer allocation", 4);
	if (!(currow=(PIXEL *)clamalloc(width*sizeof(PIXEL))))
		exitit("error currow buffer allocation", 4);
	if (!(decorelatedrow=(PIXEL *)clamalloc(width*sizeof(PIXEL))))
		exitit("error decorelatedrow buffer allocation", 4);

	if(!decoronly)
	{	
		eof=(compressedrowlen!=fread((void *)compressedrow, 1, compressedrowlen, infile));
		bs.readptr=compressedrow;
		statinitdecoder(bpp, maxclen, evol, width, &bs);
	}

	for (row=0; row<height; row++)
	{	
		PIXEL *helprowptr;

		if (decoronly)
		{
			if (width!=fread((void *)decorelatedrow, sizeof(PIXEL), width, infile))
				exitit("error reading decorelated pixels from infile", 4);
		}
		else
		{
			int usedbytes;
			if (statdecompressrow(context, decorelatedrow, width, &bs))
				exitit("error decompressing (statdecompressrow())", 4);
			usedbytes=bs.readptr-compressedrow;
			assert(usedbytes<=compressedrowlen);
			if (!eof)
			{
				memmove(compressedrow, compressedrow+usedbytes, compressedrowlen-usedbytes);
				bs.readptr=compressedrow;
				eof=(usedbytes!=fread((void *)(compressedrow+(compressedrowlen-usedbytes))
									   , 1, usedbytes, infile));
			}
		}

		context=*decorelatedrow;

		corelaterow(prevrow, currow, row, width, bpp, pred, decorelatedrow);

		BEpixelrowtorawrow(filerow, currow, width, fileBYTESpp);	
		if (width!=fwrite((void *)filerow, fileBYTESpp, width, outfile))	
			exitit("error writting pixels to outfile", 4);	

		helprowptr=prevrow;
		prevrow=currow;
		currow=helprowptr;
	}

	if(!decoronly)
		statfreedecoder();

	clafree(decorelatedrow);
	clafree(currow);
	clafree(prevrow);
	clafree(filerow);
	clafree(compressedrow);
}


void compression(FILE *infile, FILE *outfile)
{
	int fileBYTESpp;
	PIXEL context;  // kontekst dla pierwszego piksela currow
	int row;	// numer aktualnie przetwarzanego wiersza
	unsigned int bitsused;	// ile bitow zapisanych (przez encodecodewords) w ostatnim niepelnym bajcie comprssedrow
	int needconvert; /* czy bajty z pliku trzeba konwertowac na piksele */

	BYTE *filerow;	// pomocniczy bufor na wiersz odczytany z pliku jezeli potrzebna konwertsja na wlasciwy endian
	PIXEL *prevrow, // poprzedni wiersz
		  *currow,  // aktualny wiersz
		  *decorelatedrow;	// wiersz po dekorelacji
	BYTE  *compressedrow;	  // precompressedrow zakodowany bitowo (rezerwujemy po 4 bajty na piksel + 4 bajty zapasu)

	if(!decoronly)
		statinitcoder(bpp, maxclen, evol, 0);

	if (bpp<9)
		fileBYTESpp=1;
	else 
		fileBYTESpp=2;

	needconvert=(fileBYTESpp!=sizeof(PIXEL)) || (fileBYTESpp>1 && !BEmachine());

	if (!(compressedrow=(BYTE *)clamalloc(4*(width+1))))
		exitit("error compressedrow buffer allocation", 4);
	if (!(prevrow=(PIXEL *)clamalloc(width*sizeof(PIXEL))))
		exitit("error pervrow buffer allocation", 4);
	if (!(currow=(PIXEL *)clamalloc(width*sizeof(PIXEL))))
		exitit("error currow buffer allocation", 4);
	if (!(decorelatedrow=(PIXEL *)clamalloc(width*sizeof(PIXEL))))
		exitit("error decorelatedrow buffer allocation", 4);
	if(needconvert)
		if (!(filerow=(BYTE *)clamalloc(width*fileBYTESpp)))
			exitit("error filerow buffer allocation", 4);

	context=0;
	bitsused=0;

	for (row=0; row<height; row++)
	{	
		PIXEL *helprowptr;

		helprowptr=prevrow;
		prevrow=currow;
		currow=helprowptr;

		if(needconvert)
		{
			if (width!=fread((void *)filerow, fileBYTESpp, width, infile))
				exitit("error reading pixels from infile", 4);
			BErawrowtopixelrow(filerow, currow, width, fileBYTESpp);
		}
		else
			if (width!=fread((void *)currow, fileBYTESpp, width, infile))
				exitit("error reading pixels from infile", 4);

		decorelaterow(prevrow, currow, row, width, bpp, pred, decorelatedrow);

		if (decoronly)
		{
			if (width!=fwrite((void *)decorelatedrow, sizeof(PIXEL), width, outfile))
				exitit("error writting decorelated pixels to outfile", 4);
		}
		else
		{
			unsigned int fullbytes=0;
			statcompressrow(context, decorelatedrow, width, 
							compressedrow, &fullbytes, &bitsused);
			if (fullbytes!=fwrite((void *)compressedrow, 1, fullbytes, outfile))
				exitit("error writting compressed pixels to outfile", 4);
			if (bitsused) /* bitsused jest z zakresu 0-31 */
				*(unsigned int *)compressedrow=*(unsigned int *)(compressedrow+fullbytes);
		}

		context=*decorelatedrow;
	}

	if(!decoronly)
	{
		if (bitsused)			/* jezeli trzeba to zapisz ostatni bajt skompresowanego obrazka*/
			if (1!=fwrite((void *)compressedrow, (bitsused+7)/8, 1, outfile))
				exitit("error writting compressed pixels to outfile", 4);
		statfreecoder();	/* zwolnij struktury */
	}

	if(needconvert)
		clafree(filerow);
	clafree(decorelatedrow);
	clafree(currow);
	clafree(prevrow);
	clafree(compressedrow);
}


void compression8bpp(FILE *infile, FILE *outfile)
{
	BYTE context;  // kontekst dla pierwszego piksela currow
	int row;	// numer aktualnie przetwarzanego wiersza
	unsigned int bitsused;	// ile bitow zapisanych (przez encodecodewords) w ostatnim niepelnym bajcie comprssedrow

	BYTE *prevrow, // poprzedni wiersz
		  *currow,  // aktualny wiersz
		  *decorelatedrow;	// wiersz po dekorelacji
	BYTE  *compressedrow;	  // precompressedrow zakodowany bitowo (rezerwujemy po 4 bajty na piksel + 4 bajty zapasu)

	assert(bpp<=8);

	decorelateinit8bpp(bpp); /* dekorelacja nie wymaga zwolnienia */
	if(!decoronly)
		statinitcoder(bpp, maxclen, evol, 1);

	if (!(compressedrow=(BYTE *)clamalloc(4*(width+1))))
		exitit("error compressedrow buffer allocation", 4);
	if (!(prevrow=(BYTE *)clamalloc(width)))
		exitit("error pervrow buffer allocation", 4);
	if (!(currow=(BYTE *)clamalloc(width)))
		exitit("error currow buffer allocation", 4);
	if (!(decorelatedrow=(BYTE *)clamalloc(width)))
		exitit("error decorelatedrow buffer allocation", 4);

	context=0;
	bitsused=0;

	for (row=0; row<height; row++)
	{	
		BYTE *helprowptr;

		helprowptr=prevrow;
		prevrow=currow;
		currow=helprowptr;

		if (width!=fread((void *)currow, 1, width, infile))
			exitit("error reading pixels from infile", 4);

		decorelaterow8bpp(prevrow, currow, row, width, bpp, pred, decorelatedrow);

		if (decoronly)
		{
			if (width!=fwrite((void *)decorelatedrow, 1, width, outfile))
				exitit("error writting decorelated pixels to outfile", 4);
		}
		else
		{
			unsigned int fullbytes=0;
			statcompressrow8bpp(context, decorelatedrow, width, 
							compressedrow, &fullbytes, &bitsused);
			if (fullbytes!=fwrite((void *)compressedrow, 1, fullbytes, outfile))
				exitit("error writting compressed pixels to outfile", 4);
			if (bitsused) /* bitsused jest z zakresu 0-31 */
				*(unsigned int *)compressedrow=*(unsigned int *)(compressedrow+fullbytes);
		}

		context=*decorelatedrow;
	}

	if(!decoronly)
	{
		if (bitsused)			/* jezeli trzeba to zapisz ostatni bajt skompresowanego obrazka*/
			if (1!=fwrite((void *)compressedrow, (bitsused+7)/8, 1, outfile))
				exitit("error writting compressed pixels to outfile", 4);
		statfreecoder();	/* zwolnij struktury */
	}

	clafree(decorelatedrow);
	clafree(currow);
	clafree(prevrow);
	clafree(compressedrow);
}


int main(const int argc, char **argv)
{
	FILE *infile, *outfile;

	if (CheckAssumptions())
		exitit("internal error: CheckAssumptions() fail. Chceck compiler options and macros.", 100);

	processcmdline(argc, argv);

	if (echo) 
		printf("\n" PROGNAME);
	if (echo) 
		printf("\nBEmachine() = %d", BEmachine());

	infile=fopen(infilename, "rb");
	if (!infile)
		exitit("error openning infile", 2);
	if (f_compress)
		readPGMP5header(infile);
	else
		readCDFheader(infile);

	if (echo) 
		printparams();

	testparams();

	outfile=fopen(outfilename, "wb");
	if (!outfile)
		exitit("error openning outfile", 2);
	if (!noheader)
	{
		if (f_compress)
			writeCDFheader(outfile);
		else
			writePGMP5header(outfile);
	}

	if (f_compress)
	{
		if (bpp<=8 && !generic8bpp)
			compression8bpp(infile, outfile);
		else
			compression(infile, outfile);
	}
	else
		decompression(infile, outfile);

	fclose(infile);
	fclose(outfile);

	if (echo) 
		printf("\n\nFinished!\n");

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩av一区| 国产一区二区视频在线| 丝袜亚洲另类欧美| 国产福利一区二区三区视频在线| 一道本成人在线| 精品奇米国产一区二区三区| 一区二区三区久久| 国产中文字幕一区| 制服丝袜亚洲色图| 一区二区三区蜜桃网| 成人爱爱电影网址| 精品国产一区二区三区忘忧草 | 亚洲福利国产精品| 丁香六月综合激情| 精品久久国产97色综合| 午夜成人在线视频| 欧洲一区在线电影| 亚洲乱码国产乱码精品精小说| 粉嫩一区二区三区在线看| 精品日本一线二线三线不卡| 日韩不卡手机在线v区| 欧美三级电影一区| 亚洲电影你懂得| 91久久国产综合久久| 亚洲精品欧美激情| 91成人国产精品| 亚洲影院在线观看| 欧美日韩一区精品| 亚洲成av人片一区二区梦乃| 欧美视频中文字幕| 午夜免费久久看| 51精品秘密在线观看| 亚洲国产成人tv| 欧美人与z0zoxxxx视频| 五月天亚洲婷婷| 欧美福利一区二区| 全部av―极品视觉盛宴亚洲| 日韩区在线观看| 久久99国产精品成人| 2014亚洲片线观看视频免费| 国产真实乱子伦精品视频| 国产日韩欧美综合在线| 波多野结衣亚洲一区| 国产精品毛片大码女人| 91麻豆蜜桃一区二区三区| 亚洲男人的天堂在线aⅴ视频| 92精品国产成人观看免费| 亚洲免费av观看| 欧美日本不卡视频| 精品一二三四在线| 国产精品无人区| 欧美伊人精品成人久久综合97 | 欧美三级电影在线观看| 五月婷婷色综合| 日韩精品一区国产麻豆| 国产在线国偷精品免费看| 中文字幕成人av| 在线观看一区不卡| 久久99国产精品久久99| 中文字幕一区二| 欧美精选一区二区| 国产乱一区二区| 一区二区三区四区不卡在线| 7777精品伊人久久久大香线蕉经典版下载| 精一区二区三区| 亚洲欧美激情插| 91精品国产麻豆国产自产在线| 国产一区二区三区高清播放| 国产精品福利av| 91精品中文字幕一区二区三区| 国产成人综合亚洲91猫咪| 亚洲一区在线观看网站| 久久久国产综合精品女国产盗摄| 色婷婷综合久色| 久久66热偷产精品| 一区二区三区在线高清| 国产性做久久久久久| 在线电影院国产精品| 成人一级黄色片| 免费人成黄页网站在线一区二区| 国产精品国产三级国产普通话99| 欧美精品久久天天躁| 高潮精品一区videoshd| 日本免费在线视频不卡一不卡二| 亚洲视频一区在线| 久久这里只精品最新地址| 欧美中文字幕不卡| 99久久99久久精品国产片果冻| 美美哒免费高清在线观看视频一区二区| 欧美国产亚洲另类动漫| 欧美一二三区在线观看| 91美女在线看| 成人性色生活片| 狠狠网亚洲精品| 天堂av在线一区| 亚洲电影你懂得| 亚洲精品成a人| 中文字幕一区二区三区在线观看| 久久香蕉国产线看观看99| 91精品国产麻豆国产自产在线| 91福利国产成人精品照片| 91在线观看美女| 成人高清视频免费观看| 粉嫩av一区二区三区在线播放| 久久se精品一区二区| 肉色丝袜一区二区| 亚洲国产精品一区二区www在线 | 97久久精品人人澡人人爽| 国内精品国产三级国产a久久| 午夜免费久久看| 亚洲成a人v欧美综合天堂下载| 亚洲综合丝袜美腿| 亚洲色图欧洲色图婷婷| 综合在线观看色| 亚洲欧美一区二区三区国产精品 | 91精品国产综合久久久久久久久久 | 99精品国产99久久久久久白柏| 懂色av中文字幕一区二区三区| 国产综合久久久久久鬼色| 国产一区 二区 三区一级| 久久国产综合精品| 国产一区二三区好的| 黑人巨大精品欧美黑白配亚洲| 精品一区二区在线免费观看| 激情偷乱视频一区二区三区| 国产一区二区女| 国产91精品一区二区麻豆亚洲| 国产成人一级电影| av网站免费线看精品| 日本高清视频一区二区| 欧美伦理影视网| 欧美tickling挠脚心丨vk| 久久综合一区二区| 亚洲欧洲色图综合| 亚洲成a人v欧美综合天堂下载| 美女视频第一区二区三区免费观看网站 | 欧美日韩不卡视频| 欧美一区二区久久久| 久久一二三国产| 国产精品久久久久久妇女6080| 亚洲亚洲精品在线观看| 奇米色一区二区| 国产不卡视频一区二区三区| 91丨porny丨国产入口| 欧美三级在线视频| 久久综合狠狠综合| 亚洲精品日日夜夜| 麻豆freexxxx性91精品| 不卡av在线网| 欧美一区二区免费观在线| 国产精品污www在线观看| 亚洲国产日韩精品| 国产精品资源在线观看| 日本高清不卡在线观看| 精品国一区二区三区| 日韩久久一区二区| 免费观看91视频大全| 91影院在线观看| 欧美不卡一区二区三区四区| 亚洲美女视频在线观看| 国内成+人亚洲+欧美+综合在线| 91在线码无精品| 欧美成人女星排行榜| 亚洲精品一二三| 国产乱码精品一区二区三区忘忧草 | 欧美日韩高清一区二区| 国产午夜精品久久| 奇米一区二区三区av| 91免费版在线看| 久久久久久影视| 日本欧美加勒比视频| 色综合久久综合| 欧美激情一区不卡| 男女视频一区二区| 欧美日韩一区二区三区四区五区| 日本一区二区三区高清不卡| 日韩电影在线一区二区三区| 91视频精品在这里| 国产精品亲子伦对白| 精品一区二区三区免费观看| 欧美日韩视频第一区| 一二三区精品视频| 99视频精品在线| 欧美高清在线视频| 国产一区二区不卡在线| 日韩欧美一级二级| 蜜臀精品一区二区三区在线观看 | 国产成人免费视频精品含羞草妖精| 777a∨成人精品桃花网| 亚洲一区二区视频在线| 色综合久久久久综合99| 国产精品久久久久久久久免费樱桃 | www.欧美日韩| 久久精品一区四区| 国内成人自拍视频| 精品av久久707| 国产麻豆精品在线| 精品国产免费人成电影在线观看四季 | 亚洲婷婷综合色高清在线| 成人18精品视频|