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

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

?? image.c

?? VC小波應用 視頻編碼播放 EZW2 WAVLETS TRANSFORMER
?? C
?? 第 1 頁 / 共 3 頁
字號:
	//分配浮點型的數據內存空間,這個是函數的輸出
	pfimage=(PFIMAGE)malloc(sizeof(FIMAGE));
	if (pfimage==NULL){
		free(pimage);
		return NULL;
	}
	//打開指定路徑的pgm圖像
	if ((fp=fopen(PGMFileName, "rb"))==NULL){
		free(pimage);
		return NULL;
	}
	//處理文件頭
	while ((ch != 'P') && (ch != '#')){ 
		ch = fgetc(fp);
	}
	
	//跳過文件附件信息
	PGMSkipComments(fp, &ch);

	//規定支持打開的pgm類型為P5
	ftype = fgetc(fp);
	//異常處理
	if (ftype != '5'){
		ImageWarning("Only binary PGM is supported.\n");
		free(pfimage);
		free(pimage);
		fclose(fp);
		return NULL;
	}
	//獲取圖像的寬、高數值
	pimage->xsize=(int)PGMGetVal(fp);
	pimage->ysize=(int)PGMGetVal(fp);
	//獲取圖像灰度值的最大值
	MaxG=(int)PGMGetVal(fp);
	
	//分配圖像數據的內存空間
	if(!ImageBufferAlloc(pimage)){
		free(pimage);
		free(pfimage);
		return NULL;
	}
	
	//從文件尾開始的指針偏移,以避免讀取無用的圖像附加信息
	fseek(fp, -1*pimage->xsize * pimage->ysize, SEEK_END);

	//加載圖像數據,如果發現數據的大小不匹配,則出錯退出,釋放原有的圖像數據空間,關閉已打開的pgm文件
	if (fread(pimage->pixel[0], sizeof(unsigned char),
		pimage->xsize*pimage->ysize, fp) != (unsigned int)pimage->xsize*pimage->ysize){
		fclose(fp);
		ImageBufferFree(pimage);
		free(pimage);
		free(pfimage);
		return NULL;
	}
	fclose(fp);
	//將數據類型轉換為浮點型
	pfimage->xsize=pimage->xsize;
	pfimage->ysize=pimage->ysize;	

	//分配內存空間
	if(!FImageBufferAlloc(pfimage)){
		free(pfimage);
		ImageFree(pimage);
		return NULL;
	}
	//將pimage中的數據轉換后拷貝到pfimage中,完成浮點轉換
	for (i=0; i< pfimage->xsize*pfimage->ysize; i++){
		pfimage->pixelLinear[i]=(double)pimage->pixelLinear[i];
	}
	//釋放暫存用的整形數據空間
	ImageFree(pimage);

	return pfimage;
}


/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/	
int WritePGM(PIMAGE pimage, char *PGMFileName)
{
	FILE *fp;
	int i;
	
	if ((fp=fopen(PGMFileName, "wb+"))==NULL){
		return 0;
	}
	
	fprintf(fp, "P5\n#%s\n%d %d\n255\n", PGMFileName, pimage->xsize, pimage->ysize);

	i=fwrite(pimage->pixel[0], sizeof(unsigned char),
		(pimage->xsize)*(pimage->ysize), fp);
	
	fclose(fp);
	
	if (i!=(pimage->ysize)*(pimage->xsize)){
      return 0;
   }
   else{
      return i;
   }
}

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/	
int WriteFloatToPGM(PFIMAGE pfimage, char *PGMFileName)
{
	FILE *fp;
	unsigned char **temp, *tempLinear;
	int i;
	
	temp=Byte_Alloc(pfimage->ysize, pfimage->xsize);
	tempLinear=temp[0];

	if (temp==NULL){
		return 0;
	}

	if ((fp=fopen(PGMFileName, "wb+"))==NULL){
		return 0;
	}
	
	fprintf(fp, "P5\n#%s\n%d %d\n255\n", PGMFileName, pfimage->xsize, pfimage->ysize);

	/* Copy */
	for (i=0; i<pfimage->xsize*pfimage->ysize; i++){
		tempLinear[i]=(int)((pfimage->pixelLinear[i]+0.5) < 0.0 ? 0 : 
						 ((pfimage->pixelLinear[i]+0.5) > 255.0 ? 255 : 
						  (pfimage->pixelLinear[i]+0.5)));
	}

	i=fwrite(temp[0], sizeof(unsigned char), (pfimage->xsize)*(pfimage->ysize), fp);
	fclose(fp);
	
	free(temp[0]);
	free(temp);

	if (i!=(pfimage->ysize)*(pfimage->xsize)){
      return 0;
   }
   else{
      return i;
   }
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/* Get a number from a pgm file header, skipping comments etc. */
unsigned int PGMGetVal (FILE* infile)
{
  unsigned int tmp;
  unsigned char ch;
  do { 
	  ch = fgetc(infile); 
  } while ((ch <= ' ') && (ch != '#'));

  PGMSkipComments(infile, &ch);

  ungetc(ch, infile);

  /* Do not understand this part */
  if (fscanf(infile,"%u",&tmp) != 1) {
    ImageError("%s\n","Error parsing file!");
  }

  return(tmp);
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
void PGMSkipComments(FILE* infile, unsigned char *ch)
{
	while ((*ch == '#')){
		while (*ch != '\n'){ 
			*ch = fgetc(infile); 
		}
		while (*ch < ' '){
			*ch = fgetc(infile); 
		}
	}
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
double ImageCompareMSE(PIMAGE pimage1, PIMAGE pimage2)
{
   int i;
   double Error, SumOfSquareError=0.0;

   if ((pimage1->xsize != pimage2->xsize) || (pimage1->ysize!=pimage2->ysize)){
      ImageWarning("Cannot compare images of different sizes (%dx%d and %dx%d)\n",
         pimage1->xsize, pimage1->ysize, pimage2->xsize, pimage2->ysize);
      return 0.0;
   }

   for (i=0; i< pimage1->xsize*pimage1->ysize; i++){
      Error=pimage1->pixelLinear[i]-pimage2->pixelLinear[i];
      SumOfSquareError+=Error*Error;
   }

   return SumOfSquareError/(double)(pimage1->xsize*pimage1->ysize);

}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
double ImageComparePSNR(PIMAGE pimage1, PIMAGE pimage2)
{
   int i;
   double Error, SumOfSquareError=0.0, RootMeanSquareError;

   if ((pimage1->xsize != pimage2->xsize) || (pimage1->ysize!=pimage2->ysize)){
      ImageWarning("Cannot compare images of different sizes (%dx%d and %dx%d)\n",
         pimage1->xsize, pimage1->ysize, pimage2->xsize, pimage2->ysize);
      return 0.0;
   }

   for (i=0; i< pimage1->xsize*pimage1->ysize; i++){
      Error=pimage1->pixelLinear[i]-pimage2->pixelLinear[i];
      SumOfSquareError+=Error*Error;
   }

   RootMeanSquareError = sqrt(SumOfSquareError/(double)(pimage1->xsize*pimage1->ysize));
   
   return 20*log10(255.0/RootMeanSquareError); /* assume maximum 255 */

}


/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
double FImageCompareMSE(PFIMAGE pfimage1, PFIMAGE pfimage2)
{
   int i;
   double Error, SumOfSquareError=0.0;

   if ((pfimage1->xsize != pfimage2->xsize) || (pfimage1->ysize!=pfimage2->ysize)){
      ImageWarning("Cannot compare images of different sizes (%dx%d and %dx%d)\n",
         pfimage1->xsize, pfimage1->ysize, pfimage2->xsize, pfimage2->ysize);
      return 0.0;
   }

   for (i=0; i< pfimage1->xsize*pfimage1->ysize; i++){
      Error=pfimage1->pixelLinear[i]-pfimage2->pixelLinear[i];
      SumOfSquareError+=Error*Error;
   }

   return SumOfSquareError/(double)(pfimage1->xsize*pfimage1->ysize);

}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
double FImageComparePSNR(PFIMAGE pfimage1, PFIMAGE pfimage2)
{
   int i;
   double Error, SumOfSquareError=0.0, RootMeanSquareError;

   if ((pfimage1->xsize != pfimage2->xsize) || (pfimage1->ysize!=pfimage2->ysize)){
      ImageWarning("Cannot compare images of different sizes (%dx%d and %dx%d)\n",
         pfimage1->xsize, pfimage1->ysize, pfimage2->xsize, pfimage2->ysize);
      return 0.0;
   }

   for (i=0; i< pfimage1->xsize*pfimage1->ysize; i++){
      Error=pfimage1->pixelLinear[i]-pfimage2->pixelLinear[i];
      SumOfSquareError+=Error*Error;
   }

   RootMeanSquareError = sqrt(SumOfSquareError/(double)(pfimage1->xsize*pfimage1->ysize));
   
   return 20*log10(255.0/RootMeanSquareError); /* assume maximum 255 */

}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/* RGB to YCbCr */
void rgb2ycc(double r, double g, double b, double *y, double *cb, double *cr)
{
	(*y)  =  0.29900*r + 0.58700*g + 0.11400*b;
	(*cb) = -0.16874*r - 0.33126*g + 0.50000*b + 128.0;
	(*cr) =  0.50000*r - 0.41869*g - 0.08131*b + 128.0;

	return;
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/* YCbCr to RGB */
void ycc2rgb(double y,double cb, double cr, double *r, double *g, double *b)
{
	cb	  = cb - 128.0;
	cr	  = cr - 128.0;
	(*r) = y + 1.40200*cr;
	(*g) = y - 0.34414*cb - 0.71414*cr;
	(*b) = y + 1.77200*cb;
}


/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/* Rescales a matrix using bicubic spline interpolation 
 * (taken from Nachtwerk audioDSP library). Coded by Makus Fick
 *
 */
PIMAGE RescaleImage(PIMAGE pimageSrc, int newWidth, int newHeight, double zeroVal)
{	
   int srcXI, srcYI;
	int xx, yy;
   int width, height;
   double xstep, ystep;
   double **matrix1, **matrix2;
   double srcX, srcXF, srcY, srcYF;
   double ip0, ip1, ip2, ip3, a0, a1, a2, a3, yd1, yd2, yd3, inv;
   PIMAGE pimageDest;

	width = pimageSrc->xsize;
   height= pimageSrc->ysize;   	
   xstep = ((double)width) / ((double)newWidth);
   ystep = ((double)height) / ((double)newHeight);
   
   pimageDest = ImageAlloc(newWidth, newHeight);

   if (pimageDest==NULL){
      return NULL;
   }
   
   if ((matrix1 = Double_Alloc(height, newWidth))==NULL){
      ImageFree(pimageDest);
      return NULL;
   }

   if ((matrix2 = Double_Alloc(newHeight, newWidth))==NULL){
      ImageFree(pimageDest);
      free(matrix1[0]);
      return NULL;
   }
   
   /* first step: decimate width */
   if( newWidth != width ){
      for (yy=0; yy < height; yy++ ){
         for (xx=0; xx<newWidth; xx++){
            srcX = xstep*xx;
            srcXI= (int)srcX;
            
            srcXF= srcX - (double)srcXI;
            
            ip0 = (( ( srcXI   < 0 ) || ( srcXI   >= width ) ) ? zeroVal : pimageSrc->pixel[yy][srcXI]);
            ip1 = (( ( srcXI+1 < 0 ) || ( srcXI+1 >= width ) ) ? zeroVal : pimageSrc->pixel[yy][srcXI+1]);
            ip2 = (( ( srcXI+2 < 0 ) || ( srcXI+2 >= width ) ) ? zeroVal : pimageSrc->pixel[yy][srcXI+2]);
				ip3 = (( ( srcXI+3 < 0 ) || ( srcXI+3 >= width ) ) ? zeroVal : pimageSrc->pixel[yy][srcXI+3]);
				
            a0  = ip0;
            a1  = ( 7.0 * ip3 - 31.5 * ip2 + 63.0 * ip1 - 38.5 * ip0) / 21.0;
            yd1 = (-3.5 * ip3 + 21.0 * ip2 - 10.5 * ip1 -  7.0 * ip0) / 21.0;
            yd2 = ip1 - ip0;
            yd3 = a1 + yd1;
            a3  = yd3 - 2.0 * yd2;
            a2  = yd2 - a3 - a1;
            
            inv = ((a3 * srcXF + a2)* srcXF + a1)* srcXF + a0;

            inv = (inv < 0.0) ? 0.0 : ((inv > 255.0) ? 255.0 : inv);
				matrix1[yy][xx] = inv;
         }
      }
   }
   else{
      for(yy=0; yy<height; yy++ ){
         for(xx=0; xx<width; xx++ ){
            matrix1[yy][xx] = pimageSrc->pixel[yy][xx];
         }
      }
   }

   /* second step: decimate height */
   if (newHeight != height){
      for( xx=0; xx<newWidth; xx++){
         for( yy=0; yy<newHeight; yy++ ){
            srcY = ystep*yy;
            srcYI	= (int)srcY;
            
            srcYF	= srcY - (double)srcYI;
            ip0 = (( ( srcYI   < 0 ) || ( srcYI   >= height ) ) ? zeroVal : matrix1[srcYI  ][xx]);
            ip1 = (( ( srcYI+1 < 0 ) || ( srcYI+1 >= height ) ) ? zeroVal : matrix1[srcYI+1][xx]);
            ip2 = (( ( srcYI+2 < 0 ) || ( srcYI+2 >= height ) ) ? zeroVal : matrix1[srcYI+2][xx]);
            ip3 = (( ( srcYI+3 < 0 ) || ( srcYI+3 >= height ) ) ? zeroVal : matrix1[srcYI+3][xx]);

            a0  = ip0;
            a1  = ( 7.0 * ip3 - 31.5 * ip2 + 63.0 * ip1 - 38.5 * ip0) / 21.0;
            yd1 = (-3.5 * ip3 + 21.0 * ip2 - 10.5 * ip1 -  7.0 * ip0) / 21.0;
				yd2 = ip1 - a0;
            yd3 = a1 + yd1;
            a3  = yd3 - 2.0 * yd2;
            a2  = yd2 - a3 - a1;

            inv = ((a3 * srcYF + a2) * srcYF + a1)* srcYF + a0;

            inv = (inv < 0.0) ? 0.0 : ((inv > 255.0) ? 255.0 : inv);
            matrix2[yy][xx] = inv;
         }
      }
   }
	else{
      for(xx=0; xx<newWidth; xx++ ){
         for(yy=0; yy<height; yy++ ){
            matrix2[yy][xx] = matrix1[yy][xx];
         }
      }
   }

   /* copy */
   for (yy=0; yy<newHeight; yy++){
      for (xx=0; xx<newWidth; xx++){
         pimageDest->pixel[yy][xx]=(unsigned char)matrix2[yy][xx];
      }
   }

   free(matrix1[0]);
   free(matrix2[0]);

   return pimageDest;
   
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
void ImageError(char *fmt, ...)
{
	va_list argptr;
	
	va_start( argptr, fmt );
	fprintf(stderr, "ImageError: " );
	vprintf( fmt, argptr );
	va_end( argptr );
	exit( -1 );
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
void ImageWarning(char *fmt, ...)
{
	va_list argptr;
	
	va_start( argptr, fmt );
	fprintf( stderr, "ImageWarning: " );
	vprintf( fmt, argptr );
	va_end( argptr );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
洋洋成人永久网站入口| 天天色天天操综合| 亚洲成av人片一区二区三区| 国产乱码精品一品二品| 欧美美女一区二区在线观看| 欧美国产视频在线| 久久99在线观看| 91精品国产欧美日韩| 亚洲六月丁香色婷婷综合久久| 玖玖九九国产精品| 宅男噜噜噜66一区二区66| 亚洲人成网站影音先锋播放| 国产一区欧美二区| 精品少妇一区二区三区免费观看| 亚洲午夜久久久久久久久电影网| 成人免费看片app下载| 26uuu亚洲婷婷狠狠天堂| 日韩av一二三| 欧美日韩亚洲另类| 亚洲自拍欧美精品| 在线免费精品视频| 亚洲免费在线看| 色噜噜狠狠成人中文综合| 中文字幕中文字幕一区二区| 国产精品18久久久| 久久精子c满五个校花| 国产伦精品一区二区三区免费迷 | 天天做天天摸天天爽国产一区| av成人动漫在线观看| 国产精品成人免费精品自在线观看 | 国产精品乱码一区二三区小蝌蚪| 极品尤物av久久免费看| 精品av久久707| 九九国产精品视频| 欧美va天堂va视频va在线| 美腿丝袜亚洲三区| www国产精品av| 国产成人综合在线| 最新日韩在线视频| 色老汉一区二区三区| 亚洲国产精品一区二区www| 欧美区一区二区三区| 久久99精品国产麻豆婷婷洗澡| 精品久久久久久最新网址| 国产精品一区二区男女羞羞无遮挡| 久久久久久久久久久黄色| 国产99精品国产| 亚洲久本草在线中文字幕| 精品污污网站免费看| 水蜜桃久久夜色精品一区的特点| 日韩一区二区电影网| 国产传媒一区在线| 亚洲综合一区在线| 精品国产乱码久久久久久闺蜜 | 精品中文字幕一区二区小辣椒| 26uuu精品一区二区三区四区在线| 高清成人在线观看| 亚洲欧美日韩一区| 欧美一区二区福利视频| 国产精品一二二区| 亚洲高清视频的网址| 欧美tk丨vk视频| 日本韩国精品在线| 美女视频黄久久| 136国产福利精品导航| 欧美久久久久久蜜桃| 国产精品中文有码| 一区二区三区日韩| 26uuu亚洲| 欧美精品三级在线观看| 国产成人免费av在线| 日韩精品亚洲一区| 亚洲欧洲制服丝袜| 欧美电影免费观看高清完整版在线观看| 成人黄页在线观看| 美女诱惑一区二区| 日韩伦理av电影| 久久综合九色综合久久久精品综合| 色8久久精品久久久久久蜜| 国产在线播精品第三| 伊人开心综合网| 国产婷婷一区二区| 精品日韩欧美在线| 67194成人在线观看| av资源站一区| 丰满岳乱妇一区二区三区| 日本va欧美va瓶| 亚洲小说欧美激情另类| 国产精品超碰97尤物18| 久久久久久97三级| 日韩欧美一区中文| 欧美精品1区2区| 91成人免费网站| 91美女片黄在线观看91美女| 国产一区二区三区四区在线观看| 午夜视频一区在线观看| 亚洲精品中文字幕在线观看| 国产精品午夜久久| 国产清纯美女被跳蛋高潮一区二区久久w| 555夜色666亚洲国产免| 欧日韩精品视频| 波多野结衣在线aⅴ中文字幕不卡| 国产综合色视频| 麻豆高清免费国产一区| 日本一道高清亚洲日美韩| 亚洲一级片在线观看| 亚洲情趣在线观看| 亚洲精品免费播放| 亚洲激情男女视频| 一区二区三区 在线观看视频| 国产精品久久久久影院色老大| 欧美精品一区在线观看| 久久奇米777| 国产日韩成人精品| 国产精品色眯眯| 国产精品久久久久影院色老大| 国产精品久久久久婷婷| 亚洲特黄一级片| 亚洲一区在线视频| 日韩中文字幕不卡| 激情综合亚洲精品| 国产成人免费视频网站 | 国产精品亚洲视频| 国产91丝袜在线18| 97se亚洲国产综合自在线| 99re这里只有精品视频首页| 一本大道av伊人久久综合| 色婷婷综合视频在线观看| 在线看国产一区二区| 欧美电影一区二区| 精品国产凹凸成av人导航| 精品国产乱码久久久久久1区2区| 中文一区二区在线观看| 综合自拍亚洲综合图不卡区| 一区二区三区毛片| 蜜桃视频在线观看一区| 国产一区二区导航在线播放| www.66久久| 欧美乱妇15p| 国产欧美日韩在线| 夜夜夜精品看看| 黄网站免费久久| 色天天综合色天天久久| 日韩欧美国产1| 日韩毛片视频在线看| 日韩精品电影在线| 国产91精品一区二区麻豆网站 | 色88888久久久久久影院按摩| 欧美日韩一区不卡| 国产亚洲美州欧州综合国| 伊人色综合久久天天| 久88久久88久久久| 91免费版在线| 亚洲精品在线观看网站| 亚洲精品国产无天堂网2021| 麻豆一区二区在线| 91视频在线观看免费| 日韩亚洲欧美一区二区三区| 中文字幕中文在线不卡住| 蜜臀精品一区二区三区在线观看| 福利91精品一区二区三区| 91精品福利在线一区二区三区| 亚洲国产成人一区二区三区| 日韩电影免费在线看| 91网站最新网址| 国产婷婷色一区二区三区四区| 香蕉成人伊视频在线观看| 成人av午夜影院| 欧美不卡一区二区三区| 亚洲国产色一区| 91麻豆免费视频| 国产午夜精品一区二区三区视频 | 国产三级一区二区| 青娱乐精品在线视频| 91国产视频在线观看| 国产精品无码永久免费888| 麻豆91精品91久久久的内涵| 欧美性大战久久久久久久| 最新日韩av在线| bt欧美亚洲午夜电影天堂| 国产亚洲视频系列| 国产一二三精品| 精品1区2区在线观看| 毛片av一区二区| 欧美一区二区三区在线观看视频| 亚洲国产综合在线| 欧美性大战久久| 亚洲图片欧美色图| 欧美日韩午夜在线| 亚洲一级不卡视频| 欧美午夜片在线看| 亚洲国产裸拍裸体视频在线观看乱了| 91免费在线播放| 亚洲日本va午夜在线电影| 播五月开心婷婷综合| 国产精品入口麻豆原神| 成人一区在线看| 国产精品灌醉下药二区| 不卡的av中国片| 亚洲免费高清视频在线|