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

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

?? pngfunc.c

?? 從sourceforge下的圖像壓縮源碼
?? C
字號:
/***
 * pngfunc.c
 ***
 * soucast knihovny libopen
 * 2007-04-29
 * xbarin02@stud.fit.vutbr.cz  
 ***
 * fce pro praci s PNG
 */

#include "pngfunc.h"
#include "error.h"
#include <stdlib.h>

PFrameBuff loadpng(char *fname)
{
  FILE* png_file;
  png_bytep png_sig_buff;

  if( NULL == (png_file = fopen(fname, "rb")) )
  {
    eprintf("fopen() fails!");
    return(NULL);
  }

  const png_size_t _png_sig_num_bytes = 4;

  png_sig_buff = malloc( sizeof(png_byte)*_png_sig_num_bytes );
  if( NULL == png_sig_buff)
  {
    fclose( png_file );
    eprintf("malloc() fails!");
    return(NULL);
  }

  if( fread(png_sig_buff, 1, _png_sig_num_bytes, png_file) != _png_sig_num_bytes
      || ferror(png_file) )
  {
    fclose( png_file );
    free( png_sig_buff ); 
    eprintf("fread() fails!");
    return(NULL);
  }
  
  if( png_sig_cmp( png_sig_buff, 0, _png_sig_num_bytes) )
  {
    fclose( png_file );
    free( png_sig_buff ); 
    eprintf("png_sig_cmp() fails!");
    return(NULL);
  }

  free( png_sig_buff ); 

  png_structp _png_read;
  _png_read = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL );
  if(!_png_read)
  {
    fclose( png_file );
    eprintf("png_create_read_struct() fails!");
    return(NULL);
  }

  png_infop _info;
  _info = png_create_info_struct( _png_read );
  if(!_info)
  {
    fclose( png_file );
    eprintf("png_create_info_struct() fails!");
    return(NULL);
  }

  int ret = setjmp(_png_read->jmpbuf);
  if( ret )
  {
    png_destroy_read_struct( &_png_read, &_info, (png_infopp)NULL );
    fclose( png_file );
    eprintf("setjmp() fails! (%i)", ret);
    return(NULL);
  }

  png_init_io( _png_read, png_file );

  png_set_sig_bytes( _png_read, _png_sig_num_bytes );

  png_read_info( _png_read, _info );

  if(_info->bit_depth == 16)
    png_set_strip_16(_png_read);

  if(_info->color_type == PNG_COLOR_TYPE_GRAY && _info->bit_depth < 8)
    png_set_expand(_png_read);

  if(_info->color_type == PNG_COLOR_TYPE_PALETTE && _info->bit_depth < 8)
    png_set_packing(_png_read);

  if(_info->color_type == PNG_COLOR_TYPE_PALETTE )
    png_set_expand(_png_read);

  if(_info->color_type != PNG_COLOR_TYPE_PALETTE && (_info->valid & PNG_INFO_tRNS))
    png_set_expand(_png_read);

  if(_info->bit_depth < 8)
    png_set_packing(_png_read);

  if(_info->color_type == PNG_COLOR_TYPE_GRAY || _info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
    png_set_gray_to_rgb(_png_read);

  int _n_of_passes;
  _n_of_passes = png_set_interlace_handling(_png_read);
//  _n_of_passes = 1;

  png_read_update_info(_png_read, _info);

  uint32 w, h;
  w = _info->width;
  h = _info->height;

  png_bytepp row_pointers = malloc( sizeof(png_bytep)*_info->height );
  if( NULL == row_pointers )
  {
    png_destroy_read_struct( &_png_read, &_info, (png_infopp)NULL );
    fclose( png_file );
    eprintf("malloc() fails!");
    return(NULL);
  }

  png_uint_32 row_bytes = png_get_rowbytes( _png_read, _info );

  for( unsigned int row = 0; row < _info->height; row++ )
    if( NULL == (row_pointers[row] = malloc( sizeof(png_byte)*row_bytes )) )
    {
      for(unsigned tmp = 0; tmp < row; tmp++)
        free(row_pointers[tmp]);
      free(row_pointers);
      png_destroy_read_struct( &_png_read, &_info, (png_infopp)NULL );
      fclose( png_file );
      eprintf("malloc() fails (%u)!",row);
      return(NULL);
    }

  for( int pass = 1; pass <= _n_of_passes; pass++ )
    png_read_rows(_png_read, row_pointers, NULL, _info->height);

  PFrameBuff fbuff = malloc(sizeof(TFrameBuff));
  if( NULL == fbuff )
  {
	  png_read_end( _png_read, _info );
    for( unsigned int row = 0; row < _info->height; row++ )
      free( row_pointers[row] );
	  free( row_pointers );
    png_destroy_read_struct( &_png_read, &_info, (png_infopp)NULL );
    fclose( png_file );
    eprintf("malloc() fails!");
    return(NULL);  
  }

  fbuff->w = w;
  fbuff->h = h;
  fbuff->buff = malloc(sizeof(TPixel)*w*h);

  if( NULL == fbuff->buff )
  {
	  png_read_end( _png_read, _info );
    free(fbuff);
    for( unsigned int row = 0; row < _info->height; row++ )
      free( row_pointers[row] );
    free( row_pointers );
    png_destroy_read_struct( &_png_read, &_info, (png_infopp)NULL );
    fclose( png_file );
    eprintf("malloc() fails!");
    return(NULL);  
  }
  
	for( unsigned int row = 0, pixel = 0; row < _info->height; row++ )
  {
		for( unsigned int byte_in_row = 0; byte_in_row + (_info->channels-1) < row_bytes;
		       byte_in_row += _info->channels )
    {
			fbuff->buff[pixel].r = row_pointers[row][byte_in_row];
			fbuff->buff[pixel].g = row_pointers[row][byte_in_row + 1];
			fbuff->buff[pixel].b = row_pointers[row][byte_in_row + 2];
			pixel += 1; // next pixel in framebuffer
		}
	} 

	png_read_end( _png_read, _info );

	for( unsigned int row = 0; row < _info->height; row++ )
		free( row_pointers[row] );
	
	free( row_pointers );

	fclose(png_file); 

  png_destroy_read_struct( &_png_read, &_info, (png_infopp)NULL ); 

  return(fbuff);
}

int savepng(char *fname, PFrameBuff fbuff)
{
  png_structp _png_read;
  png_infop _info;

	_png_read = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
  if(!_png_read)
  {
    eprintf("png_create_read_struct() fails!");
    return(-1);
  }

	_info = png_create_info_struct( _png_read );
  if(!_info)
  {
    eprintf("png_create_info_struct() fails!");
    return(-1);
  }

	_info->height = fbuff->h;
	_info->width = fbuff->w;
	_info->channels = 3;
	_info->rowbytes = _info->channels*fbuff->w;
	_info->color_type = PNG_COLOR_TYPE_RGB;
	_info->bit_depth = 8;
	_info->interlace_type = PNG_INTERLACE_NONE;
	_info->filter_type = PNG_FILTER_TYPE_BASE;
	_info->compression_type = PNG_COMPRESSION_TYPE_BASE;
	_info->pixel_depth = 8;
	_info->srgb_intent = 0;
	int _n_of_passes = 1; 

  FILE* png_file;
  if( NULL == (png_file = fopen(fname, "wb")) )
  {
    eprintf("fopen() fails!");
    return(-1);
	}

	png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
	if( NULL == png_ptr )
  {
		fclose(png_file);
		eprintf("png_create_write_struct() fails!");
		return(-1);
	} 

	if ( setjmp(png_jmpbuf(png_ptr)))
  {
		png_destroy_write_struct(&png_ptr, NULL);
		fclose( png_file );
		eprintf("setjmp(png_jmpbuf()) fails!");
		return(-1);
	}

	png_init_io(png_ptr, png_file);

  png_write_info( png_ptr, _info );
  
  png_bytepp row_pointers = malloc( sizeof(png_bytep)*_info->height );
  if( NULL == row_pointers )
  {
		png_destroy_write_struct(&png_ptr, NULL);
		fclose( png_file );
		eprintf("malloc() fails!");
		return(-1);
  }

  png_uint_32 row_bytes = _info->channels*_info->width;

	for( unsigned int row = 0; row < _info->height; row++ )
		if( NULL == (row_pointers[row] = malloc( sizeof(png_byte)*row_bytes )) )
    {
      for(unsigned tmp=0; tmp<row; tmp++)
        free(row_pointers[tmp]);
      free(row_pointers);
  		png_destroy_write_struct(&png_ptr, NULL);
	  	fclose( png_file );
      eprintf("malloc() fails!");
      return(-1);
    }

	for( unsigned int row = 0, pixel = 0; row < _info->height; row++)
  {
		for( unsigned int byte_in_row = 0; byte_in_row + (_info->channels-1) < row_bytes;
		      byte_in_row += _info->channels)
    {
			row_pointers[row][byte_in_row]     = fbuff->buff[pixel].r;
			row_pointers[row][byte_in_row + 1] = fbuff->buff[pixel].g;
			row_pointers[row][byte_in_row + 2] = fbuff->buff[pixel].b;
			pixel += 1; // next pixel in framebuffer
		}
	}

	for( int pass = 1; pass <= _n_of_passes; pass++ )
		png_write_rows(png_ptr, row_pointers, _info->height);

	png_write_end(png_ptr, _info );
	
	png_destroy_write_struct( &png_ptr, NULL );

	for( unsigned int row = 0; row < _info->height; row++ )
		free(row_pointers[row]);

	free(row_pointers);

	fclose(png_file);

  png_destroy_read_struct(&_png_read, &_info, (png_infopp)NULL );

  return(0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产色产综合色产在线视频| 欧美日韩激情一区| 久久精品国产77777蜜臀| 亚洲一区二区三区小说| 亚洲人成网站精品片在线观看| 久久女同互慰一区二区三区| 精品国产欧美一区二区| 久久嫩草精品久久久精品一| 久久九九99视频| 欧美韩国日本一区| 中文字幕一区二区不卡| 18欧美亚洲精品| 亚洲资源中文字幕| 美女在线观看视频一区二区| 蜜臀久久99精品久久久久久9| 免费在线看一区| 激情六月婷婷综合| 粉嫩欧美一区二区三区高清影视| 国产激情一区二区三区| 91网站在线播放| 欧美精选一区二区| 久久综合久久99| 中文字幕一区在线观看| 亚洲欧美激情小说另类| 亚洲综合在线免费观看| 日本视频在线一区| 风间由美一区二区av101| 欧美色中文字幕| 91精品国产综合久久久久久久久久| 欧美一区二区三区四区五区| 久久久久成人黄色影片| 亚洲免费看黄网站| 看国产成人h片视频| 成人免费av资源| 欧美最新大片在线看| 日韩三级在线免费观看| 国产蜜臀av在线一区二区三区| 亚洲欧美国产高清| 久久激情五月婷婷| 99久久国产综合精品女不卡| 777亚洲妇女| 亚洲日本在线视频观看| 青青草原综合久久大伊人精品优势 | 日本高清不卡一区| 精品美女一区二区三区| 亚洲一二三专区| 国产成都精品91一区二区三| 在线观看免费视频综合| 中文幕一区二区三区久久蜜桃| 亚洲成人av一区| 91亚洲国产成人精品一区二三| 欧美草草影院在线视频| 亚洲国产日韩综合久久精品| av一区二区不卡| www亚洲一区| 久久精品久久精品| 欧美日韩国产首页在线观看| 国产精品国产馆在线真实露脸| 久久国产精品无码网站| 欧美日韩一区国产| 亚洲综合视频网| 91免费看`日韩一区二区| 国产亚洲人成网站| 精品一区二区在线观看| 91精品综合久久久久久| 婷婷激情综合网| 欧美性xxxxx极品少妇| 综合久久一区二区三区| va亚洲va日韩不卡在线观看| 国产视频一区二区在线| 狠狠狠色丁香婷婷综合激情 | 日本在线播放一区二区三区| 91国模大尺度私拍在线视频| 国产精品久久久久久户外露出| 国产在线一区二区综合免费视频| 欧美精品日韩精品| 五月天丁香久久| 在线播放一区二区三区| 日本欧美加勒比视频| 欧美男人的天堂一二区| 日韩二区三区在线观看| 日韩亚洲欧美中文三级| 免费日本视频一区| 欧美sm极限捆绑bd| 国产在线不卡视频| 国产精品三级av在线播放| 国产成人精品综合在线观看| 国产亚洲欧美中文| 99久久精品99国产精品| 亚洲午夜羞羞片| 7777精品久久久大香线蕉| 蜜臀91精品一区二区三区| 亚洲国产高清aⅴ视频| 国产成人在线色| 亚洲卡通欧美制服中文| 欧美在线综合视频| 日本不卡1234视频| 久久久久久久国产精品影院| 高清在线观看日韩| 又紧又大又爽精品一区二区| 欧美狂野另类xxxxoooo| 久久国产精品免费| 中文字幕在线一区| 欧美日韩视频在线一区二区| 毛片基地黄久久久久久天堂| 亚洲国产成人在线| 91.xcao| 成熟亚洲日本毛茸茸凸凹| 亚洲综合在线电影| 精品久久久久久久久久久久久久久久久 | 亚洲午夜久久久久久久久电影院| 欧美日韩免费视频| 国产精品自拍av| 亚洲欧洲中文日韩久久av乱码| 欧美精品乱码久久久久久| 国产精品99久久久| 亚洲一区二区在线播放相泽| 亚洲精品一区二区三区蜜桃下载 | 免费xxxx性欧美18vr| 国产精品美女视频| 欧美一区二区三区免费视频| 成+人+亚洲+综合天堂| 日产国产高清一区二区三区| 中文字幕国产一区二区| 日韩一区二区精品在线观看| 91在线视频免费观看| 久久99九九99精品| 亚洲一区在线看| 国产精品污污网站在线观看| 日韩网站在线看片你懂的| 日本韩国一区二区| 成人精品在线视频观看| 久久er99精品| 日韩有码一区二区三区| 亚洲欧美日韩中文字幕一区二区三区 | 91视视频在线观看入口直接观看www | 日韩黄色免费电影| 夜夜嗨av一区二区三区网页 | 精品欧美一区二区三区精品久久| 欧美视频一区二区在线观看| 91一区一区三区| 成人18视频在线播放| 国产白丝精品91爽爽久久| 日韩成人精品视频| 亚欧色一区w666天堂| 亚洲综合激情网| 一级特黄大欧美久久久| 亚洲日本在线看| 亚洲美女偷拍久久| 亚洲精品高清视频在线观看| 亚洲欧洲日韩在线| 亚洲国产精品久久人人爱蜜臀| 国产精品成人一区二区艾草| 亚洲国产成人午夜在线一区| 日本一区二区高清| 久久久综合网站| 久久久久国产精品厨房| 国产精品拍天天在线| 最新热久久免费视频| 亚洲精品国产成人久久av盗摄 | 不卡一二三区首页| 99精品久久免费看蜜臀剧情介绍| 成人禁用看黄a在线| 91在线一区二区三区| 欧美日韩视频在线观看一区二区三区 | 欧美性生活影院| 欧美日韩视频专区在线播放| 在线不卡a资源高清| 精品福利一区二区三区免费视频| 欧美精品一区二区三区四区| 国产婷婷色一区二区三区 | 日韩欧美国产1| 久久久精品免费网站| 亚洲欧洲av另类| 亚洲福利一区二区三区| 蜜臀91精品一区二区三区| 国产精品一区二区在线观看网站| 国产成人精品三级麻豆| 色哟哟在线观看一区二区三区| 欧美人动与zoxxxx乱| 精品国产一区二区三区四区四 | 欧美亚洲一区二区在线观看| 欧美精品一二三| 久久综合九色欧美综合狠狠| 国产精品久久精品日日| 亚洲成人1区2区| 国产91在线观看| 欧美三片在线视频观看| 久久色在线视频| 精品一区二区三区香蕉蜜桃| 高清不卡一区二区| 欧美色视频在线观看| 久久久久亚洲蜜桃| 亚洲成a人v欧美综合天堂| 国产资源精品在线观看| 欧美唯美清纯偷拍| 国产精品三级电影| 麻豆专区一区二区三区四区五区| 成人毛片视频在线观看| 日韩一区二区精品|