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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? unezw.c

?? 采用零樹編碼(EZW)進(jìn)行圖像壓縮的源碼
?? C
字號:
/*
EZW解碼器

解碼器數(shù)據(jù)掃描的方式:

Morton order scan:
====================================

   1 | 2 |  5   6 | 17  18  21  22
  ---+---|        |
   3 | 4 |  7   8 | 19  20  23  24
  -------+--------|
   9  10 | 13  14 | 25  26  29  30
         |        |
  11  12 | 15  16 | 27  28  31  32
  ----------------+---------------
  33  34   37  38 | 49  50  53  54
                  |
  35  36   39  40 | 51  52  55  56
                  |
  41  42   45  46 | 57  58  61  62
                  |
  43  44   47  48 | 59  60  63  64


Raster scan:
========================

   1 | 2 |  5   6 | 17  18  19  20
  ---+---|        |
   3 | 4 |  7   8 | 21  22  23  24
  -------+--------|
   9  10 | 13  14 | 25  26  27  28
         |        |
  11  12 | 15  16 | 29  30  31  32
  ----------------+---------------
  33  34   35  36 | 49  50  51  52
                  |
  37  38   39  40 | 53  54  55  56
                  |
  41  42   43  44 | 57  58  59  60
                  |
  45  46   47  48 | 61  62  63  64

數(shù)據(jù)平面的頻段分布:
Subband distribution:
==========================================

  LL | HL | HL   HL | HL   HL   HL   HL
  ---+--- |         |
  LH | HH | HL   HL | HL   HL   HL   HL
  --------+---------|
  LH   LH | HH   HH | HL   HL   HL   HL
          |         |
  LH   LH | HH   HH | HL   HL   HL   HL
  ------------------+------------------
  LH   LH   LH   LH | HH   HH   HH   HH
                    |
  LH   LH   LH   LH | HH   HH   HH   HH
                    |
  LH   LH   LH   LH | HH   HH   HH   HH
                    |
  LH   LH   LH   LH | HH   HH   HH   HH


*/


#define debug


#include "ezw.h"
#include "fifo.h"
#include "list.h"
#include "matrix2d.h"

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


matrix_2d *M;					//定義工作矩陣
char error;						//定義誤差
FILE *ezw_file;					//已編碼文件
ezw_file_header header;			//文件頭
long int pixels;
long int zeroes, ones;
unsigned char input_byte, mask;


void show_code(int code)
{
  	switch (code)
	{
    	case ZERO:			//如果編碼為ZERO,則輸出為0
   			printf("0");
			break;

		case ONE:			//如果編碼為ONE,則輸出為1
			printf("1");
			break;

		case POS:			//如果編碼為POS,則輸出為p
			printf("p");
			break;

		case NEG:			//如果編碼為NEG,則輸出為n
			printf("n");
			break;

		case ZTR:			//如果編碼為ZTR,則輸出為t
      		printf("t");
    		break;

		case IZ:			//如果編碼為IZ,則輸出為z
      		printf("z");
    		break;
	}
}


//從一個(gè)輸入流中讀出一個(gè)比特位
char get_bit(void)
{
  	char bit;		//定義讀出的比特位存儲空間
  	if (mask==0) 
  	{
  		//從文件中讀出一個(gè)字節(jié),存放在input_byte中
		fread(&input_byte,sizeof(input_byte),1,ezw_file);
  		mask = 0x80;	//最高位標(biāo)志
  	}
  	//如果讀出字節(jié)的最高位為0,則讀出比特位的值為0
	if ((input_byte&mask)==0) 
	{
  		bit = '0';
   		zeroes++;
  	}
	//否則讀出比特位的值為1
  	else
	{
    	bit = '1';
    	ones++;
  	}
	//最高標(biāo)志位右移一位
	mask >>= 1;
	//返回當(dāng)前判斷的比特位的值
	return (bit);
}

 
//從一個(gè)輸入流中讀出一個(gè)編碼字節(jié)
int input_code(int count)
{
	switch (get_bit())
	{
		//如果讀出的比特位的值為0
		case '0':
			//假如是讀出字節(jié)的最高位,則返回ZERO
    		if (count==1) return (ZERO);
 			//否則,讀取比特位
			else 
			{
 				switch (get_bit()) 
				{
					case '0': return (ZTR);	//如果讀出為0,返回為ZTR
					case '1': return (POS);	//如果讀出為1,返回為POS
        		}
      		}
			break;
		//如果讀出的比特位的值為1
		case '1':
			//假如是讀出字節(jié)的最高位,則返回ONE
      		if (count==1) return (ONE);
			//否則,讀取比特位
      		else
			{
				switch (get_bit())
				{
					case '0': return (IZ);	//如果讀出為0,返回為IZ
          			case '1': return (NEG);	//如果讀出為1,返回為NEG
        		}
      		}
    		break;
	}
	//缺省返回值,不可返回
	return 0;
}

 
//利用主表元素和閾值解碼后填充當(dāng)前矩陣元素
void input_element(matrix_2d *m, element_type t, ezw_element *s)
{
	list_type d;
	d.x = s->x;
	d.y = s->y;
	s->code = input_code(2);

#ifdef debug
	show_code(s->code);
#endif

	if ((s->code==POS)) 
	{
		m->m[s->y][s->x] = t;
		append_to_list(d);
  	}
  	else if ((s->code==NEG))
	{
    	m->m[s->y][s->x] = -t;
    	append_to_list(d);
  	}
}


/*
 * Performs one dominant pass.
 */

void dominant_pass(matrix_2d *m, element_type threshold)
{
  	ezw_element s;
  	int min_x, max_x, min_y, max_y;

	s.x = 0;
	s.y = 0;
	input_element(m,threshold,&s);
	if ((s.code==POS) || (s.code==NEG)) pixels++;

	s.x = 1;
	s.y = 0;
	input_element(m,threshold,&s);
	put_in_fifo(s);
	s.x = 0;
	s.y = 1;
	input_element(m,threshold,&s);
	put_in_fifo(s);
	s.x = 1;
	s.y = 1;
	input_element(m,threshold,&s);
	put_in_fifo(s);

	s = get_from_fifo();
	if (fifo_empty==0)
	{
		if ((s.code==POS) || (s.code==NEG)) pixels++;
  	}

  	while (fifo_empty==0)
	{
  		if (s.code!=ZTR)
		{
     		min_x = s.x << 1;
      		max_x = min_x+1;
      		min_y = s.y << 1;
      		max_y = min_y+1;
      		if ((max_x<=m->col) && (max_y<=m->row))
			{
        		for (s.y=min_y; s.y<=max_y; s.y++)
				{
					for (s.x=min_x; s.x<=max_x; s.x++)
					{
            			input_element(m,threshold,&s);
            			put_in_fifo(s);
          			}
        		}
      		}
    	}
    	s = get_from_fifo();
    	if (fifo_empty==0)
		{
			if ((s.code==POS) || (s.code==NEG)) pixels++;
    	}
	}
}


/*
 * Performs one subordinate pass.
 */
void subordinate_pass(matrix_2d *m, element_type threshold)
{
  	long int i;
  	element_type temp;
  	list_type d;
  	char found;

  	if (threshold>0) 
	{
    	for (i=0; i<pixels; i++)
		{
      		d = get_list_element(i,&found);
      		if (found==1)
			{
        		temp = m->m[d.y][d.x];
        		if (input_code(1)==ONE)
				{
					#ifdef debug
						show_code(ONE);
					#endif
          			if (temp<0)
					{
						m->m[d.y][d.x] = temp - threshold;
          			}
          			else
					{
						m->m[d.y][d.x] = temp + threshold;
          			}
        		}
#ifdef debug
				else show_code(ZERO);
#endif
			}
		}
	}
}
 
//將編碼文件數(shù)據(jù)解碼存放到工作矩陣m中
void EZW_decode(matrix_2d *m)
{
  	element_type threshold;			//閾值
  	pixels = 0;
  	threshold = header.threshold;
  	//從初始閾值開始知道閾值為0
	while (threshold!=0) 
	{
    	dominant_pass(m,threshold);
    	subordinate_pass(m,threshold >> 1);
    	threshold >>= 1;		//閾值減半
  	}
}
 
int iEZW(void)
{
	printf("\n");

  //以二進(jìn)制只讀模式打開編碼文件
  if ((ezw_file=fopen("out.ezw","rb"))==NULL) {
    printf("Could not open input file.\n");
    exit(1);
  };
  //讀文件的頭信息
  fread(&header,sizeof(header),1,ezw_file);

  //創(chuàng)建一個(gè)工作矩陣(給出高和寬)
  M = matrix_2d_create(header.height,header.width);
  if (M==NULL) exit(1);
  //矩陣清零
  matrix_2d_clear(M);

  //初始值設(shè)置
  zeroes = 0;
  ones = 0;
  input_byte = 0;
  mask = 0;
  EZW_decode(M);

#ifdef debug
  printf("\n");
  //工作矩陣賦值(寫操作)
  matrix_2d_write(M);
  printf("%ld bits: %ld zeroes, %ld ones\n", zeroes+ones, zeroes, ones);
#endif

  //關(guān)閉先前的編碼文件
  fclose(ezw_file);
  //釋放工作矩陣占據(jù)的存儲空間
  matrix_2d_destroy(M);
  //釋放主表掃描過程中的臨時(shí)數(shù)據(jù)
  destroy_fifo();
  //清除零樹掃描過程中的臨時(shí)數(shù)據(jù)
  destroy_list();

  return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲v精品v日韩v欧美v专区| 国产精品久久看| 国产精品99久| 中文字幕在线一区| 精品视频一区二区不卡| 久久99精品久久只有精品| 国产精品私房写真福利视频| 欧美日韩一区小说| 国产激情一区二区三区桃花岛亚洲| 欧美激情一区二区| 欧美久久久一区| 国产91高潮流白浆在线麻豆| 性做久久久久久| 国产精品美女久久福利网站| 欧美一区二区三区影视| 91欧美一区二区| 蜜臀久久久99精品久久久久久| 亚洲色图一区二区三区| 精品久久99ma| 欧美人与z0zoxxxx视频| 99精品国产91久久久久久| 国产一区二区三区四 | 欧美午夜寂寞影院| 国产精品1区2区| 日本一不卡视频| 亚洲精品成人天堂一二三| 久久久亚洲国产美女国产盗摄 | 日本欧美一区二区三区乱码| 国产精品无码永久免费888| 日韩欧美国产午夜精品| 欧美日韩在线播放| 91农村精品一区二区在线| 国产成人在线观看免费网站| 一区二区三区四区精品在线视频| 欧美激情艳妇裸体舞| 欧美一区二区三区人| 欧美伦理影视网| 色哟哟国产精品免费观看| 国产99久久久国产精品潘金网站| 七七婷婷婷婷精品国产| 视频一区在线播放| 亚洲成人在线观看视频| 亚洲精品视频在线观看免费| 国产精品网站一区| 欧美—级在线免费片| 精品乱码亚洲一区二区不卡| 日韩午夜精品电影| 91精品国产91综合久久蜜臀| 欧美日韩国产免费| 欧美麻豆精品久久久久久| 成人av一区二区三区| 国产精品18久久久久| 韩国av一区二区三区| 激情综合色播激情啊| 性做久久久久久免费观看欧美| 最新国产成人在线观看| 国产精品第一页第二页第三页| 日本一区二区三级电影在线观看 | 欧美日韩精品欧美日韩精品| 欧美综合视频在线观看| 91成人在线精品| 欧美在线视频日韩| 欧美视频在线观看一区二区| 欧美日韩午夜影院| 欧美精品久久99| 日韩午夜电影av| 久久综合视频网| 亚洲国产精品成人综合| 亚洲欧美在线观看| 亚洲女厕所小便bbb| 亚洲一区二区三区四区的| ...av二区三区久久精品| 亚洲黄色录像片| 午夜视频一区在线观看| 久久精品国产在热久久| 国产美女精品人人做人人爽| 国产精品影视网| 成人一区在线观看| 日本道在线观看一区二区| 欧美日韩高清一区二区| 日韩欧美久久久| 欧美国产禁国产网站cc| 亚洲乱码国产乱码精品精98午夜| 免费观看日韩av| 91亚洲国产成人精品一区二区三| 欧美一区二区三区免费观看视频 | 国产成人精品影视| 久久国产福利国产秒拍| 色哟哟在线观看一区二区三区| 91精品国产色综合久久不卡电影 | 亚洲精品亚洲人成人网| 精品一区二区三区免费播放| 91久久精品一区二区三区| 精品电影一区二区三区| 亚洲成人综合网站| 成人高清视频在线| 日韩欧美一区二区视频| 一区二区三区成人在线视频| 国产伦精品一区二区三区在线观看| 91激情在线视频| 中文字幕国产一区二区| 蓝色福利精品导航| 欧美日韩一区视频| 亚洲日本在线天堂| 国产九九视频一区二区三区| 91精品国产综合久久精品图片| 亚洲精品国产精品乱码不99| 国产精品一区专区| 日韩欧美中文字幕一区| 午夜在线成人av| 91精品福利视频| 一区在线中文字幕| 国产98色在线|日韩| 精品日韩99亚洲| 免费在线观看一区| 欧美日韩国产乱码电影| 一区二区三区精品久久久| 成人午夜av在线| 国产亚洲综合色| 国内精品久久久久影院一蜜桃| 欧美一区二区在线免费观看| 亚洲一区二区三区视频在线播放| 91在线观看免费视频| 国产精品蜜臀在线观看| 国产成人精品影院| 亚洲国产成人一区二区三区| 国产精品系列在线播放| 欧美精品一区二区三区久久久| 蜜臀av一区二区在线免费观看| 亚洲精品国产第一综合99久久| yourporn久久国产精品| 国产欧美精品一区| 成人蜜臀av电影| 国产精品水嫩水嫩| 99精品视频在线播放观看| 国产精品国产三级国产专播品爱网| 国产高清在线观看免费不卡| www国产精品av| 国产成+人+日韩+欧美+亚洲| 国产午夜精品久久| 不卡电影免费在线播放一区| 国产精品人妖ts系列视频| 成人精品小蝌蚪| 亚洲欧洲精品成人久久奇米网 | 日韩欧美一级特黄在线播放| 免费成人结看片| 精品乱人伦一区二区三区| 国产九色精品成人porny| 国产精品美女久久久久av爽李琼 | 欧美一卡二卡三卡四卡| 九色综合国产一区二区三区| 久久综合九色综合久久久精品综合 | 欧美性受xxxx黑人xyx性爽| 性感美女久久精品| 欧美本精品男人aⅴ天堂| 韩国一区二区在线观看| 极品美女销魂一区二区三区免费| 日韩欧美的一区二区| 国产二区国产一区在线观看 | 首页国产欧美日韩丝袜| 日韩一级精品视频在线观看| 国产一区二区三区免费在线观看| 国产精品日产欧美久久久久| 91电影在线观看| 久久99精品视频| 中文字幕亚洲成人| 欧美另类z0zxhd电影| 国产一区美女在线| 亚洲精品一二三| 日韩女优毛片在线| 99久久免费视频.com| 午夜欧美在线一二页| 久久久蜜臀国产一区二区| 91麻豆免费视频| 美女在线观看视频一区二区| 国产色一区二区| 欧美日韩国产免费| 成人性生交大片免费看中文 | 处破女av一区二区| 亚洲午夜免费电影| 久久一留热品黄| 色综合久久久久| 久久97超碰国产精品超碰| 亚洲品质自拍视频| 精品国产欧美一区二区| 色噜噜狠狠成人网p站| 麻豆精品新av中文字幕| 亚洲日本青草视频在线怡红院| 日韩精品中文字幕在线一区| 91一区在线观看| 国产在线观看一区二区| 亚洲成人一区二区在线观看| 国产精品美女视频| 日韩欧美精品在线视频| 欧美亚洲图片小说| 大白屁股一区二区视频| 美女mm1313爽爽久久久蜜臀| 亚洲精品成人精品456| 国产欧美日韩卡一| 精品蜜桃在线看|