/* * pngxset.c - libpng extension: additional image info storage. * * Copyright (C) 2003-2011 Cosmin Truta. * This software is distributed under the same licensing and warranty terms * as libpng. */ #include "pngxutil.h" /* * NOTE: * There is a discrepancy between the parameter names used in * this module vs. the PNG specification. * The PNG specification uses the terms "compression method", * "filter method" and "interlace method", while this module * uses the terms, respectively, "compression type", "filter type" * and "interlace type", following the libpng naming conventions. */ void PNGAPI pngx_set_compression_type(png_structp png_ptr, png_infop info_ptr, int compression_type) { png_uint_32 width, height; int bit_depth, color_type, interlace_type, filter_type; int old_compression_type; if (!png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, &old_compression_type, &filter_type)) return; if (compression_type == old_compression_type) return; png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, interlace_type, compression_type, filter_type); } void PNGAPI pngx_set_filter_type(png_structp png_ptr, png_infop info_ptr, int filter_type) { png_uint_32 width, height; int bit_depth, color_type, interlace_type, compression_type; int old_filter_type; if (!png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, &compression_type, &old_filter_type)) return; if (filter_type == old_filter_type) return; png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, interlace_type, compression_type, filter_type); } void PNGAPI pngx_set_interlace_type(png_structp png_ptr, png_infop info_ptr, int interlace_type) { png_uint_32 width, height; int bit_depth, color_type, compression_type, filter_type; int old_interlace_type; if (!png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &old_interlace_type, &compression_type, &filter_type)) return; if (interlace_type == old_interlace_type) return; png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, interlace_type, compression_type, filter_type); }