📄 mga_png.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 + -