⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mga_png.c

📁 linux下显示各种格式图片
💻 C
字号:
/* 	(c) HelDoRe	Png unit ...    v0.0.4			Supported formats :			libpng :-)*/			#define VERPNG " unit v0.0.4"#ifndef png_jmpbuf#  define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)#endif#define PNG_BYTES_TO_CHECK 4#include <stdio.h>#include "../mga_view.h"#ifdef USE_LIBPNG#include <png.h>#endifvoid help_png(){#ifdef USE_LIBPNGprintf("PNG%s\n   + uses libpng\n",VERPNG);#endif}int detect_png(){#ifdef USE_LIBPNG    png_bytep row_pointers[4000];    int row;    char buf[PNG_BYTES_TO_CHECK];    png_structp png_ptr;    png_infop info_ptr;    png_uint_32 width,height;    int bit_depth,color_type,interlace_type;            fread(buf,1,PNG_BYTES_TO_CHECK,plik);    tempi=png_sig_cmp(buf,(png_size_t)0,PNG_BYTES_TO_CHECK);    if (tempi!=0) return 1;    rewind(plik);    png_ptr=png_create_read_struct(PNG_LIBPNG_VER_STRING,	    NULL,NULL,NULL);    if (png_ptr==NULL) return 2;        info_ptr=png_create_info_struct(png_ptr);    if (info_ptr==NULL){	png_destroy_read_struct(&png_ptr,(png_infopp)NULL,(png_infopp)NULL);	return 2;	}    if (setjmp(png_jmpbuf(png_ptr))){	png_destroy_read_struct(&png_ptr,&info_ptr,(png_infopp)NULL);	return 2;	}	    png_init_io(png_ptr,plik);        png_read_info(png_ptr,info_ptr);    png_get_IHDR(png_ptr,info_ptr,&width,&height,&bit_depth,&color_type,&interlace_type,NULL,NULL);    image_x=width;    image_y=height;    depth=bit_depth;    tempi=png_get_channels(png_ptr,info_ptr);    check_image(image_x,image_y,depth);    printf("Png%s\n",VERPNG);    printf("Png detected    : %ix%ix%i  ch %i\n",image_x,image_y,depth,tempi);    if (color_type==PNG_COLOR_TYPE_GRAY || color_type==PNG_COLOR_TYPE_GRAY_ALPHA)	png_set_gray_to_rgb(png_ptr);    png_set_expand(png_ptr);    png_read_update_info(png_ptr,info_ptr);    tempi=png_get_channels(png_ptr,info_ptr);    for (row=0;row<height;row++){	row_pointers[row]=png_malloc(png_ptr,png_get_rowbytes(png_ptr,info_ptr));	}	    	png_read_image(png_ptr,row_pointers);	png_read_end(png_ptr,info_ptr);			for (y=0;y<image_y;y++) {		           for (x=0;x<image_x;x++)		            {			    tabr[x+y*image_x]=row_pointers[y][x*tempi];			    tabg[x+y*image_x]=row_pointers[y][x*tempi+1];			    tabb[x+y*image_x]=row_pointers[y][x*tempi+2];			    }		           }		    		    		        png_destroy_read_struct(&png_ptr,&info_ptr,(png_infopp)NULL);    return 0;	#else    return 1;#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -