📄 png.h
字号:
/* color type masks */#define PNG_COLOR_MASK_PALETTE 1#define PNG_COLOR_MASK_COLOR 2#define PNG_COLOR_MASK_ALPHA 4/* color types. Note that not all combinations are legal */#define PNG_COLOR_TYPE_GRAY 0#define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR)#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)/* aliases */#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA/* This is for compression type. PNG 1.0-1.2 only define the single type. */#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE/* This is for filter type. PNG 1.0-1.2 only define the single type. */#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE/* These are for the interlacing type. These values should NOT be changed. */#define PNG_INTERLACE_NONE 0 /* Non-interlaced image */#define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */#define PNG_INTERLACE_LAST 2 /* Not a valid value *//* These are for the oFFs chunk. These values should NOT be changed. */#define PNG_OFFSET_PIXEL 0 /* Offset in pixels */#define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */#define PNG_OFFSET_LAST 2 /* Not a valid value *//* These are for the pCAL chunk. These values should NOT be changed. */#define PNG_EQUATION_LINEAR 0 /* Linear transformation */#define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */#define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */#define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */#define PNG_EQUATION_LAST 4 /* Not a valid value *//* These are for the sCAL chunk. These values should NOT be changed. */#define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */#define PNG_SCALE_METER 1 /* meters per pixel */#define PNG_SCALE_RADIAN 2 /* radians per pixel */#define PNG_SCALE_LAST 3 /* Not a valid value *//* These are for the pHYs chunk. These values should NOT be changed. */#define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */#define PNG_RESOLUTION_METER 1 /* pixels/meter */#define PNG_RESOLUTION_LAST 2 /* Not a valid value *//* These are for the sRGB chunk. These values should NOT be changed. */#define PNG_sRGB_INTENT_PERCEPTUAL 0#define PNG_sRGB_INTENT_RELATIVE 1#define PNG_sRGB_INTENT_SATURATION 2#define PNG_sRGB_INTENT_ABSOLUTE 3#define PNG_sRGB_INTENT_LAST 4 /* Not a valid value *//* This is for text chunks */#define PNG_KEYWORD_MAX_LENGTH 79/* Maximum number of entries in PLTE/sPLT/tRNS arrays */#define PNG_MAX_PALETTE_LENGTH 256/* These determine if an ancillary chunk's data has been successfully read * from the PNG header, or if the application has filled in the corresponding * data in the info_struct to be written into the output file. The values * of the PNG_INFO_<chunk> defines should NOT be changed. */#define PNG_INFO_gAMA 0x0001#define PNG_INFO_sBIT 0x0002#define PNG_INFO_cHRM 0x0004#define PNG_INFO_PLTE 0x0008#define PNG_INFO_tRNS 0x0010#define PNG_INFO_bKGD 0x0020#define PNG_INFO_hIST 0x0040#define PNG_INFO_pHYs 0x0080#define PNG_INFO_oFFs 0x0100#define PNG_INFO_tIME 0x0200#define PNG_INFO_pCAL 0x0400#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */#define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 *//* This is used for the transformation routines, as some of them * change these values for the row. It also should enable using * the routines for other purposes. */typedef struct png_row_info_struct{ png_uint_32 width; /* width of row */ png_uint_32 rowbytes; /* number of bytes in row */ png_byte color_type; /* color type of row */ png_byte bit_depth; /* bit depth of row */ png_byte channels; /* number of channels (1, 2, 3, or 4) */ png_byte pixel_depth; /* bits per pixel (depth * channels) */} png_row_info;typedef png_row_info FAR * png_row_infop;typedef png_row_info FAR * FAR * png_row_infopp;/* These are the function types for the I/O functions and for the functions * that allow the user to override the default I/O functions with his or her * own. The png_error_ptr type should match that of user-supplied warning * and error functions, while the png_rw_ptr type should match that of the * user read/write data functions. */typedef struct png_struct_def png_struct;typedef png_struct FAR * png_structp;typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp));typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t));typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp));typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32, int));typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32, int));#ifdef PNG_PROGRESSIVE_READ_SUPPORTEDtypedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop));typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, png_uint_32, int));#endif#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_LEGACY_SUPPORTED)typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp, png_row_infop, png_bytep));#endif#if defined(PNG_USER_CHUNKS_SUPPORTED)typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp));#endif#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));#endif/* Transform masks for the high-level interface */#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */#define PNG_TRANSFORM_BGR 0x0080 /* read and write */#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only *//* Flags for MNG supported features */#define PNG_FLAG_MNG_EMPTY_PLTE 0x01#define PNG_FLAG_MNG_FILTER_64 0x04#define PNG_ALL_MNG_FEATURES 0x05typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));/* The structure that holds the information to read and write PNG files. * The only people who need to care about what is inside of this are the * people who will be modifying the library for their own special needs. * It should NOT be accessed directly by an application, except to store * the jmp_buf. */struct png_struct_def{#ifdef PNG_SETJMP_SUPPORTED jmp_buf jmpbuf; /* used in png_error */#endif png_error_ptr error_fn; /* function for printing errors and aborting */ png_error_ptr warning_fn; /* function for printing warnings */ png_voidp error_ptr; /* user supplied struct for error functions */ png_rw_ptr write_data_fn; /* function for writing output data */ png_rw_ptr read_data_fn; /* function for reading input data */ png_voidp io_ptr; /* ptr to application struct for I/O functions */#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) png_user_transform_ptr read_user_transform_fn; /* user read transform */#endif#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) png_user_transform_ptr write_user_transform_fn; /* user write transform */#endif/* These were added in libpng-1.0.2 */#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) png_voidp user_transform_ptr; /* user supplied struct for user transform */ png_byte user_transform_depth; /* bit depth of user transformed pixels */ png_byte user_transform_channels; /* channels in user transformed pixels */#endif#endif png_uint_32 mode; /* tells us where we are in the PNG file */ png_uint_32 flags; /* flags indicating various things to libpng */ png_uint_32 transformations; /* which transformations to perform */ z_stream zstream; /* pointer to decompression structure (below) */ png_bytep zbuf; /* buffer for zlib */ png_size_t zbuf_size; /* size of zbuf */ int zlib_level; /* holds zlib compression level */ int zlib_method; /* holds zlib compression method */ int zlib_window_bits; /* holds zlib compression window bits */ int zlib_mem_level; /* holds zlib compression memory level */ int zlib_strategy; /* holds zlib compression strategy */ png_uint_32 width; /* width of image in pixels */ png_uint_32 height; /* height of image in pixels */ png_uint_32 num_rows; /* number of rows in current pass */ png_uint_32 usr_width; /* width of row at start of write */ png_uint_32 rowbytes; /* size of row in bytes */ png_uint_32 irowbytes; /* size of current interlaced row in bytes */ png_uint_32 iwidth; /* width of current interlaced row in pixels */ png_uint_32 row_number; /* current row in interlace pass */ png_bytep prev_row; /* buffer to save previous (unfiltered) row */ png_bytep row_buf; /* buffer to save current (unfiltered) row */ png_bytep sub_row; /* buffer to save "sub" row when filtering */ png_bytep up_row; /* buffer to save "up" row when filtering */ png_bytep avg_row; /* buffer to save "avg" row when filtering */ png_bytep paeth_row; /* buffer to save "Paeth" row when filtering */ png_row_info row_info; /* used for transformation routines */ png_uint_32 idat_size; /* current IDAT size for read */ png_uint_32 crc; /* current chunk CRC value */ png_colorp palette; /* palette from the input file */ png_uint_16 num_palette; /* number of color entries in palette */ png_uint_16 num_trans; /* number of transparency values */ png_byte chunk_name[5]; /* null-terminated name of current chunk */ png_byte compression; /* file compression type (always 0) */ png_byte filter; /* file filter type (always 0) */ png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ png_byte pass; /* current interlace pass (0 - 6) */ png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */ png_byte color_type; /* color type of file */ png_byte bit_depth; /* bit depth of file */ png_byte usr_bit_depth; /* bit depth of users row */ png_byte pixel_depth; /* number of bits per pixel */ png_byte channels; /* number of channels in file */ png_byte usr_channels; /* channels at start of write */ png_byte sig_bytes; /* magic bytes read/written from start of file */#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)#ifdef PNG_LEGACY_SUPPORTED png_byte filler; /* filler byte for pixel expansion */#else png_uint_16 filler; /* filler bytes for pixel expansion */#endif#endif#if defined(PNG_bKGD_SUPPORTED) png_byte background_gamma_type;# ifdef PNG_FLOATING_POINT_SUPPORTED float background_gamma;# endif png_color_16 background; /* background color in screen gamma space */#if defined(PNG_READ_GAMMA_SUPPORTED) png_color_16 background_1; /* background normalized to gamma 1.0 */#endif#endif /* PNG_bKGD_SUPPORTED */#if defined(PNG_WRITE_FLUSH_SUPPORTED) png_flush_ptr output_flush_fn;/* Function for flushing output */ png_uint_32 flush_dist; /* how many rows apart to flush, 0 - no flush */ png_uint_32 flush_rows; /* number of rows written since last flush */#endif#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) int gamma_shift; /* number of "insignificant" bits 16-bit gamma */#ifdef PNG_FLOATING_POINT_SUPPORTED float gamma; /* file gamma value */ float screen_gamma; /* screen gamma value (display_exponent) */#endif#endif#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) png_bytep gamma_table; /* gamma table for 8-bit depth files */ png_bytep gamma_from_1; /* converts from 1.0 to screen */ png_bytep gamma_to_1; /* converts from file to 1.0 */ png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */ png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */ png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */#endif#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED) png_color_8 sig_bit; /* significant bits in each available channel */#endif#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) png_color_8 shift; /* shift for significant bit tranformation */#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -