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

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

?? image.c

?? 好東西呢
?? C
?? 第 1 頁 / 共 2 頁
字號:

#define AVE_DEL_YUV	// turn U&V to (U+V) , (U-V)
/** works dandy; it visually works at compactifying magnitudes : U & V are very similar
* also compactifies noise into the third band
* <> needs more testing to make sure this isn't image-anomalous
**/

#include <stdio.h>
#include <math.h>
#include <crblib/inc.h>
#include <crblib/fileutil.h>
#include <crblib/imutil.h>

#include "image.h"
#include "quantim.h"

#include "haar.h"
#include "dwt.h"
#include "dct.h"
#include "spt.h"
#include "cdf22.h"
#include "cdf24.h"
#include "bcw3.h"
#include "d4.h"
#include "f97.h"
#include "b97.h"
#include "l97.h"

#if 1	// words are Intel

#define fgetuw fgetuwi
#define fputuw fputuwi

#endif	// intel words

image * newImage(int width, int height,int planes)
{
int p,y;
image * im;
int **rows;

	if ( (im = new(image)) == NULL ) return NULL;

	im->width = width;
	im->height = height;
	im->planes = planes;
	im->plane_size = width*height;
	im->plane_bytes = (im->plane_size)*sizeof(int);
	im->tot_bytes = im->plane_bytes * planes;
	im->tot_size = im->plane_size * planes;

	if ( (im->data = newarray(int **,planes)) == NULL ) {
		freeImage(im); return NULL;
	}

	for(p=0;p<planes;p++) {

		if ( (im->data[p] = newarray(int *,height+1)) == NULL ) {
			freeImage(im); return NULL;
		}
		rows = im->data[p];

		if ( (rows[0] = malloc(im->plane_bytes + height)) == NULL ) {
			freeImage(im); return NULL;
		}

		for (y = 1; y <= height; y++)
		    rows[y] = rows[y-1] + width;

  	}

return im;
}

imageFloat * newImageFloat(int width, int height,int planes)
{
int p,y;
imageFloat * im;
double **rows;

	if ( (im = new(image)) == NULL ) return NULL;

	im->width = width;
	im->height = height;
	im->planes = planes;
	im->plane_size = width*height;
	im->plane_bytes = (im->plane_size)*sizeof(double);
	im->tot_bytes = im->plane_bytes * planes;
	im->tot_size = im->plane_size * planes;

	if ( (im->data = newarray(double **,planes)) == NULL ) {
		freeImageFloat(im); return NULL;
	}

	for(p=0;p<planes;p++) {

		if ( (im->data[p] = newarray(double *,height+1)) == NULL ) {
			freeImageFloat(im); return NULL;
		}
		rows = im->data[p];

		if ( (rows[0] = malloc(im->plane_bytes + height)) == NULL ) {
			freeImageFloat(im); return NULL;
		}

		for (y = 1; y <= height; y++)
		    rows[y] = rows[y-1] + width;

  	}

return im;
}

image * copyImage(image *im)
{
image *new;
int p;

	if ( (new = newImage(im->width,im->height,im->planes)) == NULL )
		return NULL;

	for(p=0;p<im->planes;p++) {
		memcpy(new->data[p][0],im->data[p][0],im->plane_bytes);
	}

return new;
}

image * newImageFromFloat(imageFloat *im)
{
image *new;

	if ( (new = newImage(im->width,im->height,im->planes)) == NULL )
		return NULL;

return new;
}

imageFloat * newImageFloatFromFloat(imageFloat *im)
{
imageFloat *new;

	if ( (new = newImageFloat(im->width,im->height,im->planes)) == NULL )
		return NULL;

return new;
}

image * newImageFrom(image *im)
{
image *new;

	if ( (new = newImage(im->width,im->height,im->planes)) == NULL )
		return NULL;

return new;
}
imageFloat * newImageFloatFrom(image *im)
{
imageFloat *new;

	if ( (new = newImageFloat(im->width,im->height,im->planes)) == NULL )
		return NULL;

return new;
}


void freeImage(image *im) 
{
	if (im ) {
		if ( im->data ) {
			int p;
			for(p=0;p<im->planes;p++) {
				if ( im->data[p] ) {
					if (im->data[p][0] )
						free(im->data[p][0]);
					free(im->data[p]);
				}
			}
			free(im->data);
		}
		free(im);
	}
}

void freeImageFloat(imageFloat *im) 
{
	if (im ) {
		if ( im->data ) {
			int p;
			for(p=0;p<im->planes;p++) {
				if ( im->data[p] ) {
					if (im->data[p][0] )
						free(im->data[p][0]);
					free(im->data[p]);
				}
			}
			free(im->data);
		}
		free(im);
	}
}

void capBandByte(int *band,int width,int height,int fullw,int cap)
{
int x,y,v,minv,maxv;
int *dp;
int rowPad = fullw - width;
double scale;

	minv = 999; maxv = -999;
	dp = band;
	for(y=height;y--;) {
		for(x=width;x--;) {
			v = *dp++;
			if ( v < minv ) minv = v;
			if ( v > maxv ) maxv = v;
		}
		dp += rowPad;
	}

	maxv = abs(maxv);
	if ( abs(minv) > abs(maxv) ) maxv = abs(minv);
	if ( maxv < cap ) return;

	scale = (double)cap/maxv;
	dp = band;
	for(y=height;y--;) {
		for(x=width;x--;) {
			*dp = (int)((*dp)*scale); dp++;
		}
		dp += rowPad;
	}
}

void capImageBands(image *im,int levels,int cap)
{
int p,l,sizeX,sizeY;
int **rows;

	for(p=0;p<im->planes;p++) {
		rows = im->data[p];
		for (l = levels; l > 0; l--) {
			sizeX = im->width >> l;
			sizeY = im->height >> l;

			if (l == levels) 
				capBandByte(rows[0], sizeX, sizeY, im->width,cap);

			capBandByte(rows[0] + sizeX, sizeX, sizeY, im->width,cap);
			capBandByte(rows[sizeY], sizeX, sizeY, im->width,cap);
			capBandByte(rows[sizeY]+sizeX, sizeX, sizeY, im->width,cap);
		}
	}
}

void subtractImage(image *im,image *by)
{
int p,r;
int *ptr,*bptr;
	for(p=0;p<im->planes;p++) {
		ptr = im->data[p][0];
		bptr =by->data[p][0];
		for(r=im->plane_size;r--;) {
			*ptr++ -= *bptr++;
		}
	}
}

void addImage(image *im,image *by)
{
int p,r;
int *ptr,*bptr;
	for(p=0;p<im->planes;p++) {
		ptr = im->data[p][0];
		bptr =by->data[p][0];
		for(r=im->plane_size;r--;) {
			*ptr++ += *bptr++;
		}
	}
}

void zeroImage(image *im)
{
int p;
	for(p=0;p<im->planes;p++)
		memclear(im->data[p][0],im->plane_bytes);
}

void patchImage(image *fm,image *to,int fmx,int fmy,int w,int h,int tox,int toy)
{
int x,y,p;
int **fmrows,**torows;
int *fmrow,*torow;
	for(p=0;p<fm->planes;p++) {
		fmrows = fm->data[p];
		torows = to->data[p];
		for(y=0;y<h;y++) {
			torow = (torows[y+toy])+tox;
			fmrow = (fmrows[y+fmy])+fmx;
			for(x=w;x--;) {
				*torow++ = *fmrow++;
			}
		}
	}
}

void patchImageFromFloat(imageFloat *fm,image *to)
{
int p,r;
int *rptr; double *fptr;

	for(p=0;p<to->planes;p++) {
		fptr = fm->data[p][0]; rptr = to->data[p][0];
		for(r=to->plane_size;r--;) *rptr++ = (int) *fptr++;
	}
}

void patchImageFloatFrom(image *fm,imageFloat *to)
{
int p,r;
int *rptr; double *fptr;

	for(p=0;p<to->planes;p++) {
		fptr = to->data[p][0]; rptr = fm->data[p][0];
		for(r=to->plane_size;r--;) *fptr++ = *rptr++;
	}
}

void transposeLHs(image *im,int levels)
{
int p,x,y,l,w,h;
int **rows,z;

	/***
	*
	*	This is a beautiful free compression win!
	*
	*	<> the SPT and DWT do a transpose right before this
	*		instead of two transposes, do zero
	*	this should be absorbed into each transform in any case
	*
	***/

	assert( im->width == im->height );

	for(p=0;p<im->planes;p++) {
		for(l=1;l<=levels;l++) {
			w = (im->width) >> l;
			h = (im->height) >> l;
			rows = &(im->data[p][h]);
			for(y=0;y<h;y++) {
				for(x=y+1;x<w;x++) {
					z			= rows[x][y];
					rows[x][y]	= rows[y][x];
					rows[y][x]	= z;
				}
			}
		}
	}
}

void dwtImage(image *im,imageFloat *imf,int levels,bool inverse)
{
int p;

if ( im->width != imf->width || im->height != imf->height ) return;

for(p=0;p<im->planes;p++)
	waveletTransform2D(im->data[p],imf->data[p],im->width,im->height,levels,inverse);

}

void cdf22ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		cdf22_2D(im->data[p],im->width,im->height,levels,inverse);
}

void cdf22Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	cdf22ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}


void f97ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		f97_2D(im->data[p],im->width,im->height,levels,inverse);
}

void f97Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	f97ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}
void b97ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		b97_2D(im->data[p],im->width,im->height,levels,inverse);
}

void b97Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	b97ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}
void l97ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		l97_2D(im->data[p],im->width,im->height,levels,inverse);
}

void l97Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	l97ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}

void cdf24ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		cdf24_2D(im->data[p],im->width,im->height,levels,inverse);
}

void cdf24Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	cdf24ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}

void bcw3ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		bcw3_2D(im->data[p],im->width,im->height,levels,inverse);
}

void bcw3Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	bcw3ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}

void d4ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		d4_2D(im->data[p],im->width,im->height,levels,inverse);
}

void d4Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	d4ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}

void sptImageInt(image *im,int levels,bool inverse)
{
int p;

/** special-case for the situation where quantizer == 1
	instead of	:	spt -> float -> quantized ints
	we do		: 	spt -> ints
***/

	for(p=0;p<im->planes;p++)
		sp_Transform2D(im->data[p],im->width,im->height,levels,inverse);
}

void sptImage(image *im,imageFloat *imF,int levels,bool inverse)
{
/** it's unnatural to copy the results of the spt into
*	a float buffer, but we do it for similarity to the
*	other transforms
**/

	if ( inverse ) patchImageFromFloat(imF,im);

	sptImageInt(im,levels,inverse);

	if (!inverse ) patchImageFloatFrom(im,imF);
}

void dctImage(image *im,imageFloat * imf,bool inverse)
{
int p,x,y,i;
int block[64],*bptr,*line;
double blockf[64],*fptr,*fline;

	if ( inverse ) {
		idct_init();	
		/** imf -> im  **/

		for(p=0;p<im->planes;p++) {
			for(y=0;y<im->height;y+=8) {
				for(x=0;x<im->width;x+=8) {
					fptr = blockf;
					for(i=0;i<8;i++) {
						fline = imf->data[p][y+i] + x;
						*fptr++ = *fline++; *fptr++ = *fline++; *fptr++ = *fline++; *fptr++ = *fline++;
						*fptr++ = *fline++; *fptr++ = *fline++; *fptr++ = *fline++; *fptr++ = *fline++;
					}

					idct(blockf,block);
				
					bptr = block;
					for(i=0;i<8;i++) {
						line = im->data[p][y+i] + x;
						*line++ = *bptr++; *line++ = *bptr++; *line++ = *bptr++; *line++ = *bptr++;
						*line++ = *bptr++; *line++ = *bptr++; *line++ = *bptr++; *line++ = *bptr++;
					}
				}
			}
		}

	} else {
		dct_init();			
		/** im  -> imf **/

		for(p=0;p<im->planes;p++) {
			for(y=0;y<im->height;y+=8) {
				for(x=0;x<im->width;x+=8) {
					bptr = block;
					for(i=0;i<8;i++) {
						line = im->data[p][y+i] + x;
						*bptr++ = *line++; *bptr++ = *line++; *bptr++ = *line++; *bptr++ = *line++;
						*bptr++ = *line++; *bptr++ = *line++; *bptr++ = *line++; *bptr++ = *line++;
					}

					dct(block,blockf);

					fptr = blockf;
					for(i=0;i<8;i++) {
						fline = imf->data[p][y+i] + x;
						*fline++ = *fptr++; *fline++ = *fptr++; *fline++ = *fptr++; *fline++ = *fptr++;
						*fline++ = *fptr++; *fline++ = *fptr++; *fline++ = *fptr++; *fline++ = *fptr++;
					}				
				}
			}
		}
	}

}

void haarImageInt(image *im,int levels,bool inverse)
{
int p;

	/** <>
	*	by far the slowest part of the Haar transform is
	*	the copy & shuffle.  This could be eliminated entirely
	*	if we adapted our coders to work on the tree-type data
	**/

	if ( inverse ) {
		image * temp;
		temp = copyImage(im);
		deshuffleImage(im,temp,levels);
		freeImage(temp);
	}

	for(p=0;p<im->planes;p++) {
		haar_Transform2D(im->data[p],im->width,im->height,levels,inverse);
	}

	if ( !inverse ) {
		image * temp;
		temp = copyImage(im);
		shuffleImage(temp,im,levels);
		freeImage(temp);
	}

}
void haarImage(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	haarImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}

void transformImage(image *raw,imageFloat *trans,int levels,bool inverse,int transformN)
{
	switch(transformN) {
		case TRANS_SPT :
			sptImage(raw,trans,levels,inverse);
			break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级精品视频在线观看| 欧美在线一区二区| 欧美三级日韩在线| 午夜视频久久久久久| 日本精品一区二区三区高清 | 国产拍欧美日韩视频二区| 视频一区二区三区入口| 欧美人动与zoxxxx乱| 亚洲不卡在线观看| 欧美图片一区二区三区| 亚洲一区二区av在线| 在线观看视频一区二区欧美日韩| 午夜影院久久久| 3d动漫精品啪啪| 日韩国产欧美在线观看| 精品国产免费久久| 国产米奇在线777精品观看| 欧美成人一级视频| www.日本不卡| 一区二区三区精密机械公司| 成人av网站在线观看免费| 亚洲精品国产一区二区精华液| 91在线播放网址| 亚洲bt欧美bt精品777| 91精品国产欧美一区二区成人| 青娱乐精品在线视频| 久久久国产精品午夜一区ai换脸| 国产91高潮流白浆在线麻豆| 国产精品色一区二区三区| 欧美日韩一本到| 免费的国产精品| 欧美国产一区在线| 91福利精品视频| 免费成人在线播放| 亚洲国产成人午夜在线一区| 欧美群妇大交群中文字幕| 国产一区二三区好的| 中文字幕一区二区三中文字幕| 91精品国产色综合久久ai换脸| 国产麻豆精品在线观看| 亚洲精品视频在线看| 精品国产乱码91久久久久久网站| 粉嫩aⅴ一区二区三区四区五区| 亚洲第一综合色| 国产亚洲1区2区3区| 欧美亚洲免费在线一区| 国产成人综合亚洲91猫咪| 亚洲精品视频在线观看免费| 日韩精品一区二区三区中文不卡| 日本韩国视频一区二区| 久久99精品一区二区三区| 欧美国产视频在线| 26uuu亚洲婷婷狠狠天堂| 不卡的av电影| 国产伦精品一区二区三区免费迷 | 亚洲成人精品在线观看| 26uuu欧美| 欧美日韩一级二级| 91精品91久久久中77777| 国产一区二区三区免费| 亚洲一区二区欧美日韩 | 日韩精品午夜视频| 国产精品久久免费看| 在线电影院国产精品| 波多野结衣中文一区| 日本成人在线电影网| 一区二区中文字幕在线| 欧美www视频| 欧美一二区视频| 欧美三级资源在线| 亚洲午夜私人影院| 亚洲欧美日韩人成在线播放| 久久久91精品国产一区二区精品 | 91麻豆精品国产91久久久更新时间 | 欧美第一区第二区| 91影院在线免费观看| 高清国产午夜精品久久久久久| 亚洲在线成人精品| 中文av一区特黄| 中文字幕欧美区| 久久综合色婷婷| 久久亚洲春色中文字幕久久久| 欧美精品日韩精品| 色天天综合久久久久综合片| 91网站在线播放| 高清国产午夜精品久久久久久| 狠狠色丁香九九婷婷综合五月| 玖玖九九国产精品| 日本亚洲最大的色成网站www| 亚洲人成网站在线| 亚洲乱码国产乱码精品精可以看| 国产拍揄自揄精品视频麻豆| 欧美国产日本韩| 国产精品沙发午睡系列990531| 国产日韩欧美亚洲| 中文字幕在线观看一区二区| 国产片一区二区| 日韩女优毛片在线| 久久精品人人做| 久久久久久久综合狠狠综合| 国产精品久久久久久久久图文区| 国产女同性恋一区二区| 欧美国产精品一区二区| 一区二区三区波多野结衣在线观看| **性色生活片久久毛片| 日韩毛片精品高清免费| 亚洲成a人片在线观看中文| 午夜国产精品影院在线观看| 亚洲尤物视频在线| 午夜视频久久久久久| 免费看日韩a级影片| 成人手机电影网| 色妞www精品视频| caoporen国产精品视频| 91精品在线免费观看| 欧美大度的电影原声| 国产精品久久久久9999吃药| 亚洲综合另类小说| 日韩不卡在线观看日韩不卡视频| 国产成人综合亚洲网站| 一本大道久久a久久综合| 国产黄人亚洲片| 欧美日韩国产首页| 久久久久亚洲蜜桃| 香蕉乱码成人久久天堂爱免费| 美国十次综合导航| 成人免费毛片嘿嘿连载视频| 欧美丰满少妇xxxbbb| 久久久亚洲精品一区二区三区| 亚洲最大成人综合| 久久精品999| 99久久国产综合精品色伊| 欧美成人性福生活免费看| 中文子幕无线码一区tr| 国产精品乱码久久久久久| 日本欧美一区二区| 国产一区高清在线| 91精品国模一区二区三区| 欧美激情一区二区三区不卡| 亚洲五月六月丁香激情| 成人黄页在线观看| 欧美一区二区三区影视| 国产亚洲精久久久久久| 亚洲国产精品久久久久秋霞影院 | 91免费看`日韩一区二区| 欧美一区午夜精品| 欧美精品久久天天躁| 亚洲最大色网站| 成人午夜av在线| 26uuu精品一区二区在线观看| 亚洲日本一区二区三区| 国产一区二区三区免费播放| 91精品国产一区二区三区蜜臀| 亚洲欧洲日产国码二区| 国产成人自拍网| 日韩免费高清av| 五月天亚洲精品| 欧美日韩一区小说| 中文字幕一区二区在线播放| 精品亚洲aⅴ乱码一区二区三区| 色婷婷av一区二区三区大白胸| 久久婷婷国产综合国色天香| 亚洲成av人片| 色视频一区二区| 亚洲欧洲国产日本综合| 国内精品伊人久久久久av影院| 欧美xxxxxxxx| 日本vs亚洲vs韩国一区三区| 欧美群妇大交群中文字幕| 亚洲天堂网中文字| 大胆亚洲人体视频| 国产精品视频免费看| 国产综合成人久久大片91| 欧美视频在线观看一区二区| 国产精品久久久久一区二区三区共| 伦理电影国产精品| 精品国产一区久久| 免费观看成人av| 久久免费国产精品| 激情综合一区二区三区| 精品伦理精品一区| 国产馆精品极品| 国产日韩欧美a| 99精品久久99久久久久| 中文在线资源观看网站视频免费不卡| 日韩高清中文字幕一区| 欧美一区二区三区不卡| 免费高清在线视频一区·| 久久日韩精品一区二区五区| 国产在线精品不卡| 欧美一区二区三区不卡| 韩日欧美一区二区三区| 久久精品视频免费观看| 色哟哟一区二区三区| 一区二区三区四区在线| 99久久er热在这里只有精品66| 亚洲精品自拍动漫在线| 欧美丝袜自拍制服另类| 久久精品免费看| 精品日韩在线一区|