13965825b97a5809454f5810f7e603cbd02daa036scroggo 23965825b97a5809454f5810f7e603cbd02daa036scroggo/* pngget.c - retrieval of values from info struct 33965825b97a5809454f5810f7e603cbd02daa036scroggo * 43965825b97a5809454f5810f7e603cbd02daa036scroggo * Last changed in libpng 1.6.17 [March 26, 2015] 53965825b97a5809454f5810f7e603cbd02daa036scroggo * Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson 63965825b97a5809454f5810f7e603cbd02daa036scroggo * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 73965825b97a5809454f5810f7e603cbd02daa036scroggo * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) 83965825b97a5809454f5810f7e603cbd02daa036scroggo * 93965825b97a5809454f5810f7e603cbd02daa036scroggo * This code is released under the libpng license. 103965825b97a5809454f5810f7e603cbd02daa036scroggo * For conditions of distribution and use, see the disclaimer 113965825b97a5809454f5810f7e603cbd02daa036scroggo * and license in png.h 123965825b97a5809454f5810f7e603cbd02daa036scroggo * 133965825b97a5809454f5810f7e603cbd02daa036scroggo */ 143965825b97a5809454f5810f7e603cbd02daa036scroggo 153965825b97a5809454f5810f7e603cbd02daa036scroggo#include "pngpriv.h" 163965825b97a5809454f5810f7e603cbd02daa036scroggo 173965825b97a5809454f5810f7e603cbd02daa036scroggo#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) 183965825b97a5809454f5810f7e603cbd02daa036scroggo 193965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 203965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_valid(png_const_structrp png_ptr, png_const_inforp info_ptr, 213965825b97a5809454f5810f7e603cbd02daa036scroggo png_uint_32 flag) 223965825b97a5809454f5810f7e603cbd02daa036scroggo{ 233965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 243965825b97a5809454f5810f7e603cbd02daa036scroggo return(info_ptr->valid & flag); 253965825b97a5809454f5810f7e603cbd02daa036scroggo 263965825b97a5809454f5810f7e603cbd02daa036scroggo return(0); 273965825b97a5809454f5810f7e603cbd02daa036scroggo} 283965825b97a5809454f5810f7e603cbd02daa036scroggo 293965825b97a5809454f5810f7e603cbd02daa036scroggopng_size_t PNGAPI 303965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_rowbytes(png_const_structrp png_ptr, png_const_inforp info_ptr) 313965825b97a5809454f5810f7e603cbd02daa036scroggo{ 323965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 333965825b97a5809454f5810f7e603cbd02daa036scroggo return(info_ptr->rowbytes); 343965825b97a5809454f5810f7e603cbd02daa036scroggo 353965825b97a5809454f5810f7e603cbd02daa036scroggo return(0); 363965825b97a5809454f5810f7e603cbd02daa036scroggo} 373965825b97a5809454f5810f7e603cbd02daa036scroggo 383965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_INFO_IMAGE_SUPPORTED 393965825b97a5809454f5810f7e603cbd02daa036scroggopng_bytepp PNGAPI 403965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_rows(png_const_structrp png_ptr, png_const_inforp info_ptr) 413965825b97a5809454f5810f7e603cbd02daa036scroggo{ 423965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 433965825b97a5809454f5810f7e603cbd02daa036scroggo return(info_ptr->row_pointers); 443965825b97a5809454f5810f7e603cbd02daa036scroggo 453965825b97a5809454f5810f7e603cbd02daa036scroggo return(0); 463965825b97a5809454f5810f7e603cbd02daa036scroggo} 473965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 483965825b97a5809454f5810f7e603cbd02daa036scroggo 493965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_EASY_ACCESS_SUPPORTED 503965825b97a5809454f5810f7e603cbd02daa036scroggo/* Easy access to info, added in libpng-0.99 */ 513965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 523965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_image_width(png_const_structrp png_ptr, png_const_inforp info_ptr) 533965825b97a5809454f5810f7e603cbd02daa036scroggo{ 543965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 553965825b97a5809454f5810f7e603cbd02daa036scroggo return info_ptr->width; 563965825b97a5809454f5810f7e603cbd02daa036scroggo 573965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 583965825b97a5809454f5810f7e603cbd02daa036scroggo} 593965825b97a5809454f5810f7e603cbd02daa036scroggo 603965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 613965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_image_height(png_const_structrp png_ptr, png_const_inforp info_ptr) 623965825b97a5809454f5810f7e603cbd02daa036scroggo{ 633965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 643965825b97a5809454f5810f7e603cbd02daa036scroggo return info_ptr->height; 653965825b97a5809454f5810f7e603cbd02daa036scroggo 663965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 673965825b97a5809454f5810f7e603cbd02daa036scroggo} 683965825b97a5809454f5810f7e603cbd02daa036scroggo 693965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI 703965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_bit_depth(png_const_structrp png_ptr, png_const_inforp info_ptr) 713965825b97a5809454f5810f7e603cbd02daa036scroggo{ 723965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 733965825b97a5809454f5810f7e603cbd02daa036scroggo return info_ptr->bit_depth; 743965825b97a5809454f5810f7e603cbd02daa036scroggo 753965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 763965825b97a5809454f5810f7e603cbd02daa036scroggo} 773965825b97a5809454f5810f7e603cbd02daa036scroggo 783965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI 793965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_color_type(png_const_structrp png_ptr, png_const_inforp info_ptr) 803965825b97a5809454f5810f7e603cbd02daa036scroggo{ 813965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 823965825b97a5809454f5810f7e603cbd02daa036scroggo return info_ptr->color_type; 833965825b97a5809454f5810f7e603cbd02daa036scroggo 843965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 853965825b97a5809454f5810f7e603cbd02daa036scroggo} 863965825b97a5809454f5810f7e603cbd02daa036scroggo 873965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI 883965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_filter_type(png_const_structrp png_ptr, png_const_inforp info_ptr) 893965825b97a5809454f5810f7e603cbd02daa036scroggo{ 903965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 913965825b97a5809454f5810f7e603cbd02daa036scroggo return info_ptr->filter_type; 923965825b97a5809454f5810f7e603cbd02daa036scroggo 933965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 943965825b97a5809454f5810f7e603cbd02daa036scroggo} 953965825b97a5809454f5810f7e603cbd02daa036scroggo 963965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI 973965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_interlace_type(png_const_structrp png_ptr, png_const_inforp info_ptr) 983965825b97a5809454f5810f7e603cbd02daa036scroggo{ 993965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 1003965825b97a5809454f5810f7e603cbd02daa036scroggo return info_ptr->interlace_type; 1013965825b97a5809454f5810f7e603cbd02daa036scroggo 1023965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 1033965825b97a5809454f5810f7e603cbd02daa036scroggo} 1043965825b97a5809454f5810f7e603cbd02daa036scroggo 1053965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI 1063965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_compression_type(png_const_structrp png_ptr, png_const_inforp info_ptr) 1073965825b97a5809454f5810f7e603cbd02daa036scroggo{ 1083965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 1093965825b97a5809454f5810f7e603cbd02daa036scroggo return info_ptr->compression_type; 1103965825b97a5809454f5810f7e603cbd02daa036scroggo 1113965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 1123965825b97a5809454f5810f7e603cbd02daa036scroggo} 1133965825b97a5809454f5810f7e603cbd02daa036scroggo 1143965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 1153965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp 1163965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr) 1173965825b97a5809454f5810f7e603cbd02daa036scroggo{ 1183965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pHYs_SUPPORTED 1193965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 1203965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_pHYs) != 0) 1213965825b97a5809454f5810f7e603cbd02daa036scroggo { 1223965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", 1233965825b97a5809454f5810f7e603cbd02daa036scroggo "png_get_x_pixels_per_meter"); 1243965825b97a5809454f5810f7e603cbd02daa036scroggo 1253965825b97a5809454f5810f7e603cbd02daa036scroggo if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER) 1263965825b97a5809454f5810f7e603cbd02daa036scroggo return (info_ptr->x_pixels_per_unit); 1273965825b97a5809454f5810f7e603cbd02daa036scroggo } 1283965825b97a5809454f5810f7e603cbd02daa036scroggo#else 1293965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(png_ptr) 1303965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(info_ptr) 1313965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 1323965825b97a5809454f5810f7e603cbd02daa036scroggo 1333965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 1343965825b97a5809454f5810f7e603cbd02daa036scroggo} 1353965825b97a5809454f5810f7e603cbd02daa036scroggo 1363965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 1373965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp 1383965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr) 1393965825b97a5809454f5810f7e603cbd02daa036scroggo{ 1403965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pHYs_SUPPORTED 1413965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 1423965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_pHYs) != 0) 1433965825b97a5809454f5810f7e603cbd02daa036scroggo { 1443965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", 1453965825b97a5809454f5810f7e603cbd02daa036scroggo "png_get_y_pixels_per_meter"); 1463965825b97a5809454f5810f7e603cbd02daa036scroggo 1473965825b97a5809454f5810f7e603cbd02daa036scroggo if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER) 1483965825b97a5809454f5810f7e603cbd02daa036scroggo return (info_ptr->y_pixels_per_unit); 1493965825b97a5809454f5810f7e603cbd02daa036scroggo } 1503965825b97a5809454f5810f7e603cbd02daa036scroggo#else 1513965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(png_ptr) 1523965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(info_ptr) 1533965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 1543965825b97a5809454f5810f7e603cbd02daa036scroggo 1553965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 1563965825b97a5809454f5810f7e603cbd02daa036scroggo} 1573965825b97a5809454f5810f7e603cbd02daa036scroggo 1583965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 1593965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp info_ptr) 1603965825b97a5809454f5810f7e603cbd02daa036scroggo{ 1613965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pHYs_SUPPORTED 1623965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 1633965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_pHYs) != 0) 1643965825b97a5809454f5810f7e603cbd02daa036scroggo { 1653965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "png_get_pixels_per_meter"); 1663965825b97a5809454f5810f7e603cbd02daa036scroggo 1673965825b97a5809454f5810f7e603cbd02daa036scroggo if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER && 1683965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->x_pixels_per_unit == info_ptr->y_pixels_per_unit) 1693965825b97a5809454f5810f7e603cbd02daa036scroggo return (info_ptr->x_pixels_per_unit); 1703965825b97a5809454f5810f7e603cbd02daa036scroggo } 1713965825b97a5809454f5810f7e603cbd02daa036scroggo#else 1723965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(png_ptr) 1733965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(info_ptr) 1743965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 1753965825b97a5809454f5810f7e603cbd02daa036scroggo 1763965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 1773965825b97a5809454f5810f7e603cbd02daa036scroggo} 1783965825b97a5809454f5810f7e603cbd02daa036scroggo 1793965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FLOATING_POINT_SUPPORTED 1803965825b97a5809454f5810f7e603cbd02daa036scroggofloat PNGAPI 1813965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pixel_aspect_ratio(png_const_structrp png_ptr, png_const_inforp 1823965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr) 1833965825b97a5809454f5810f7e603cbd02daa036scroggo{ 1843965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_READ_pHYs_SUPPORTED 1853965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 1863965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_pHYs) != 0) 1873965825b97a5809454f5810f7e603cbd02daa036scroggo { 1883965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio"); 1893965825b97a5809454f5810f7e603cbd02daa036scroggo 1903965825b97a5809454f5810f7e603cbd02daa036scroggo if (info_ptr->x_pixels_per_unit != 0) 1913965825b97a5809454f5810f7e603cbd02daa036scroggo return ((float)((float)info_ptr->y_pixels_per_unit 1923965825b97a5809454f5810f7e603cbd02daa036scroggo /(float)info_ptr->x_pixels_per_unit)); 1933965825b97a5809454f5810f7e603cbd02daa036scroggo } 1943965825b97a5809454f5810f7e603cbd02daa036scroggo#else 1953965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(png_ptr) 1963965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(info_ptr) 1973965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 1983965825b97a5809454f5810f7e603cbd02daa036scroggo 1993965825b97a5809454f5810f7e603cbd02daa036scroggo return ((float)0.0); 2003965825b97a5809454f5810f7e603cbd02daa036scroggo} 2013965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 2023965825b97a5809454f5810f7e603cbd02daa036scroggo 2033965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FIXED_POINT_SUPPORTED 2043965825b97a5809454f5810f7e603cbd02daa036scroggopng_fixed_point PNGAPI 2053965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pixel_aspect_ratio_fixed(png_const_structrp png_ptr, 2063965825b97a5809454f5810f7e603cbd02daa036scroggo png_const_inforp info_ptr) 2073965825b97a5809454f5810f7e603cbd02daa036scroggo{ 2083965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_READ_pHYs_SUPPORTED 2093965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 2103965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_pHYs) != 0 && 2113965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->x_pixels_per_unit > 0 && info_ptr->y_pixels_per_unit > 0 && 2123965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->x_pixels_per_unit <= PNG_UINT_31_MAX && 2133965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->y_pixels_per_unit <= PNG_UINT_31_MAX) 2143965825b97a5809454f5810f7e603cbd02daa036scroggo { 2153965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point res; 2163965825b97a5809454f5810f7e603cbd02daa036scroggo 2173965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio_fixed"); 2183965825b97a5809454f5810f7e603cbd02daa036scroggo 2193965825b97a5809454f5810f7e603cbd02daa036scroggo /* The following casts work because a PNG 4 byte integer only has a valid 2203965825b97a5809454f5810f7e603cbd02daa036scroggo * range of 0..2^31-1; otherwise the cast might overflow. 2213965825b97a5809454f5810f7e603cbd02daa036scroggo */ 2223965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_muldiv(&res, (png_int_32)info_ptr->y_pixels_per_unit, PNG_FP_1, 2233965825b97a5809454f5810f7e603cbd02daa036scroggo (png_int_32)info_ptr->x_pixels_per_unit) != 0) 2243965825b97a5809454f5810f7e603cbd02daa036scroggo return res; 2253965825b97a5809454f5810f7e603cbd02daa036scroggo } 2263965825b97a5809454f5810f7e603cbd02daa036scroggo#else 2273965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(png_ptr) 2283965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(info_ptr) 2293965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 2303965825b97a5809454f5810f7e603cbd02daa036scroggo 2313965825b97a5809454f5810f7e603cbd02daa036scroggo return 0; 2323965825b97a5809454f5810f7e603cbd02daa036scroggo} 2333965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 2343965825b97a5809454f5810f7e603cbd02daa036scroggo 2353965825b97a5809454f5810f7e603cbd02daa036scroggopng_int_32 PNGAPI 2363965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr) 2373965825b97a5809454f5810f7e603cbd02daa036scroggo{ 2383965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_oFFs_SUPPORTED 2393965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 2403965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_oFFs) != 0) 2413965825b97a5809454f5810f7e603cbd02daa036scroggo { 2423965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns"); 2433965825b97a5809454f5810f7e603cbd02daa036scroggo 2443965825b97a5809454f5810f7e603cbd02daa036scroggo if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER) 2453965825b97a5809454f5810f7e603cbd02daa036scroggo return (info_ptr->x_offset); 2463965825b97a5809454f5810f7e603cbd02daa036scroggo } 2473965825b97a5809454f5810f7e603cbd02daa036scroggo#else 2483965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(png_ptr) 2493965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(info_ptr) 2503965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 2513965825b97a5809454f5810f7e603cbd02daa036scroggo 2523965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 2533965825b97a5809454f5810f7e603cbd02daa036scroggo} 2543965825b97a5809454f5810f7e603cbd02daa036scroggo 2553965825b97a5809454f5810f7e603cbd02daa036scroggopng_int_32 PNGAPI 2563965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr) 2573965825b97a5809454f5810f7e603cbd02daa036scroggo{ 2583965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_oFFs_SUPPORTED 2593965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 2603965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_oFFs) != 0) 2613965825b97a5809454f5810f7e603cbd02daa036scroggo { 2623965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns"); 2633965825b97a5809454f5810f7e603cbd02daa036scroggo 2643965825b97a5809454f5810f7e603cbd02daa036scroggo if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER) 2653965825b97a5809454f5810f7e603cbd02daa036scroggo return (info_ptr->y_offset); 2663965825b97a5809454f5810f7e603cbd02daa036scroggo } 2673965825b97a5809454f5810f7e603cbd02daa036scroggo#else 2683965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(png_ptr) 2693965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(info_ptr) 2703965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 2713965825b97a5809454f5810f7e603cbd02daa036scroggo 2723965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 2733965825b97a5809454f5810f7e603cbd02daa036scroggo} 2743965825b97a5809454f5810f7e603cbd02daa036scroggo 2753965825b97a5809454f5810f7e603cbd02daa036scroggopng_int_32 PNGAPI 2763965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr) 2773965825b97a5809454f5810f7e603cbd02daa036scroggo{ 2783965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_oFFs_SUPPORTED 2793965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 2803965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_oFFs) != 0) 2813965825b97a5809454f5810f7e603cbd02daa036scroggo { 2823965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "png_get_x_offset_pixels"); 2833965825b97a5809454f5810f7e603cbd02daa036scroggo 2843965825b97a5809454f5810f7e603cbd02daa036scroggo if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL) 2853965825b97a5809454f5810f7e603cbd02daa036scroggo return (info_ptr->x_offset); 2863965825b97a5809454f5810f7e603cbd02daa036scroggo } 2873965825b97a5809454f5810f7e603cbd02daa036scroggo#else 2883965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(png_ptr) 2893965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(info_ptr) 2903965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 2913965825b97a5809454f5810f7e603cbd02daa036scroggo 2923965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 2933965825b97a5809454f5810f7e603cbd02daa036scroggo} 2943965825b97a5809454f5810f7e603cbd02daa036scroggo 2953965825b97a5809454f5810f7e603cbd02daa036scroggopng_int_32 PNGAPI 2963965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr) 2973965825b97a5809454f5810f7e603cbd02daa036scroggo{ 2983965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_oFFs_SUPPORTED 2993965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 3003965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_oFFs) != 0) 3013965825b97a5809454f5810f7e603cbd02daa036scroggo { 3023965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "png_get_y_offset_pixels"); 3033965825b97a5809454f5810f7e603cbd02daa036scroggo 3043965825b97a5809454f5810f7e603cbd02daa036scroggo if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL) 3053965825b97a5809454f5810f7e603cbd02daa036scroggo return (info_ptr->y_offset); 3063965825b97a5809454f5810f7e603cbd02daa036scroggo } 3073965825b97a5809454f5810f7e603cbd02daa036scroggo#else 3083965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(png_ptr) 3093965825b97a5809454f5810f7e603cbd02daa036scroggo PNG_UNUSED(info_ptr) 3103965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 3113965825b97a5809454f5810f7e603cbd02daa036scroggo 3123965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 3133965825b97a5809454f5810f7e603cbd02daa036scroggo} 3143965825b97a5809454f5810f7e603cbd02daa036scroggo 3153965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_INCH_CONVERSIONS_SUPPORTED 3163965825b97a5809454f5810f7e603cbd02daa036scroggostatic png_uint_32 3173965825b97a5809454f5810f7e603cbd02daa036scroggoppi_from_ppm(png_uint_32 ppm) 3183965825b97a5809454f5810f7e603cbd02daa036scroggo{ 3193965825b97a5809454f5810f7e603cbd02daa036scroggo#if 0 3203965825b97a5809454f5810f7e603cbd02daa036scroggo /* The conversion is *(2.54/100), in binary (32 digits): 3213965825b97a5809454f5810f7e603cbd02daa036scroggo * .00000110100000001001110101001001 3223965825b97a5809454f5810f7e603cbd02daa036scroggo */ 3233965825b97a5809454f5810f7e603cbd02daa036scroggo png_uint_32 t1001, t1101; 3243965825b97a5809454f5810f7e603cbd02daa036scroggo ppm >>= 1; /* .1 */ 3253965825b97a5809454f5810f7e603cbd02daa036scroggo t1001 = ppm + (ppm >> 3); /* .1001 */ 3263965825b97a5809454f5810f7e603cbd02daa036scroggo t1101 = t1001 + (ppm >> 1); /* .1101 */ 3273965825b97a5809454f5810f7e603cbd02daa036scroggo ppm >>= 20; /* .000000000000000000001 */ 3283965825b97a5809454f5810f7e603cbd02daa036scroggo t1101 += t1101 >> 15; /* .1101000000000001101 */ 3293965825b97a5809454f5810f7e603cbd02daa036scroggo t1001 >>= 11; /* .000000000001001 */ 3303965825b97a5809454f5810f7e603cbd02daa036scroggo t1001 += t1001 >> 12; /* .000000000001001000000001001 */ 3313965825b97a5809454f5810f7e603cbd02daa036scroggo ppm += t1001; /* .000000000001001000001001001 */ 3323965825b97a5809454f5810f7e603cbd02daa036scroggo ppm += t1101; /* .110100000001001110101001001 */ 3333965825b97a5809454f5810f7e603cbd02daa036scroggo return (ppm + 16) >> 5;/* .00000110100000001001110101001001 */ 3343965825b97a5809454f5810f7e603cbd02daa036scroggo#else 3353965825b97a5809454f5810f7e603cbd02daa036scroggo /* The argument is a PNG unsigned integer, so it is not permitted 3363965825b97a5809454f5810f7e603cbd02daa036scroggo * to be bigger than 2^31. 3373965825b97a5809454f5810f7e603cbd02daa036scroggo */ 3383965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point result; 3393965825b97a5809454f5810f7e603cbd02daa036scroggo if (ppm <= PNG_UINT_31_MAX && png_muldiv(&result, (png_int_32)ppm, 127, 3403965825b97a5809454f5810f7e603cbd02daa036scroggo 5000) != 0) 3413965825b97a5809454f5810f7e603cbd02daa036scroggo return result; 3423965825b97a5809454f5810f7e603cbd02daa036scroggo 3433965825b97a5809454f5810f7e603cbd02daa036scroggo /* Overflow. */ 3443965825b97a5809454f5810f7e603cbd02daa036scroggo return 0; 3453965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 3463965825b97a5809454f5810f7e603cbd02daa036scroggo} 3473965825b97a5809454f5810f7e603cbd02daa036scroggo 3483965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 3493965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr) 3503965825b97a5809454f5810f7e603cbd02daa036scroggo{ 3513965825b97a5809454f5810f7e603cbd02daa036scroggo return ppi_from_ppm(png_get_pixels_per_meter(png_ptr, info_ptr)); 3523965825b97a5809454f5810f7e603cbd02daa036scroggo} 3533965825b97a5809454f5810f7e603cbd02daa036scroggo 3543965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 3553965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr) 3563965825b97a5809454f5810f7e603cbd02daa036scroggo{ 3573965825b97a5809454f5810f7e603cbd02daa036scroggo return ppi_from_ppm(png_get_x_pixels_per_meter(png_ptr, info_ptr)); 3583965825b97a5809454f5810f7e603cbd02daa036scroggo} 3593965825b97a5809454f5810f7e603cbd02daa036scroggo 3603965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 3613965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr) 3623965825b97a5809454f5810f7e603cbd02daa036scroggo{ 3633965825b97a5809454f5810f7e603cbd02daa036scroggo return ppi_from_ppm(png_get_y_pixels_per_meter(png_ptr, info_ptr)); 3643965825b97a5809454f5810f7e603cbd02daa036scroggo} 3653965825b97a5809454f5810f7e603cbd02daa036scroggo 3663965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FIXED_POINT_SUPPORTED 3673965825b97a5809454f5810f7e603cbd02daa036scroggostatic png_fixed_point 3683965825b97a5809454f5810f7e603cbd02daa036scroggopng_fixed_inches_from_microns(png_const_structrp png_ptr, png_int_32 microns) 3693965825b97a5809454f5810f7e603cbd02daa036scroggo{ 3703965825b97a5809454f5810f7e603cbd02daa036scroggo /* Convert from metres * 1,000,000 to inches * 100,000, meters to 3713965825b97a5809454f5810f7e603cbd02daa036scroggo * inches is simply *(100/2.54), so we want *(10/2.54) == 500/127. 3723965825b97a5809454f5810f7e603cbd02daa036scroggo * Notice that this can overflow - a warning is output and 0 is 3733965825b97a5809454f5810f7e603cbd02daa036scroggo * returned. 3743965825b97a5809454f5810f7e603cbd02daa036scroggo */ 3753965825b97a5809454f5810f7e603cbd02daa036scroggo return png_muldiv_warn(png_ptr, microns, 500, 127); 3763965825b97a5809454f5810f7e603cbd02daa036scroggo} 3773965825b97a5809454f5810f7e603cbd02daa036scroggo 3783965825b97a5809454f5810f7e603cbd02daa036scroggopng_fixed_point PNGAPI 3793965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_offset_inches_fixed(png_const_structrp png_ptr, 3803965825b97a5809454f5810f7e603cbd02daa036scroggo png_const_inforp info_ptr) 3813965825b97a5809454f5810f7e603cbd02daa036scroggo{ 3823965825b97a5809454f5810f7e603cbd02daa036scroggo return png_fixed_inches_from_microns(png_ptr, 3833965825b97a5809454f5810f7e603cbd02daa036scroggo png_get_x_offset_microns(png_ptr, info_ptr)); 3843965825b97a5809454f5810f7e603cbd02daa036scroggo} 3853965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 3863965825b97a5809454f5810f7e603cbd02daa036scroggo 3873965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FIXED_POINT_SUPPORTED 3883965825b97a5809454f5810f7e603cbd02daa036scroggopng_fixed_point PNGAPI 3893965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_offset_inches_fixed(png_const_structrp png_ptr, 3903965825b97a5809454f5810f7e603cbd02daa036scroggo png_const_inforp info_ptr) 3913965825b97a5809454f5810f7e603cbd02daa036scroggo{ 3923965825b97a5809454f5810f7e603cbd02daa036scroggo return png_fixed_inches_from_microns(png_ptr, 3933965825b97a5809454f5810f7e603cbd02daa036scroggo png_get_y_offset_microns(png_ptr, info_ptr)); 3943965825b97a5809454f5810f7e603cbd02daa036scroggo} 3953965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 3963965825b97a5809454f5810f7e603cbd02daa036scroggo 3973965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FLOATING_POINT_SUPPORTED 3983965825b97a5809454f5810f7e603cbd02daa036scroggofloat PNGAPI 3993965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_x_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr) 4003965825b97a5809454f5810f7e603cbd02daa036scroggo{ 4013965825b97a5809454f5810f7e603cbd02daa036scroggo /* To avoid the overflow do the conversion directly in floating 4023965825b97a5809454f5810f7e603cbd02daa036scroggo * point. 4033965825b97a5809454f5810f7e603cbd02daa036scroggo */ 4043965825b97a5809454f5810f7e603cbd02daa036scroggo return (float)(png_get_x_offset_microns(png_ptr, info_ptr) * .00003937); 4053965825b97a5809454f5810f7e603cbd02daa036scroggo} 4063965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 4073965825b97a5809454f5810f7e603cbd02daa036scroggo 4083965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_FLOATING_POINT_SUPPORTED 4093965825b97a5809454f5810f7e603cbd02daa036scroggofloat PNGAPI 4103965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_y_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr) 4113965825b97a5809454f5810f7e603cbd02daa036scroggo{ 4123965825b97a5809454f5810f7e603cbd02daa036scroggo /* To avoid the overflow do the conversion directly in floating 4133965825b97a5809454f5810f7e603cbd02daa036scroggo * point. 4143965825b97a5809454f5810f7e603cbd02daa036scroggo */ 4153965825b97a5809454f5810f7e603cbd02daa036scroggo return (float)(png_get_y_offset_microns(png_ptr, info_ptr) * .00003937); 4163965825b97a5809454f5810f7e603cbd02daa036scroggo} 4173965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 4183965825b97a5809454f5810f7e603cbd02daa036scroggo 4193965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pHYs_SUPPORTED 4203965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 4213965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pHYs_dpi(png_const_structrp png_ptr, png_const_inforp info_ptr, 4223965825b97a5809454f5810f7e603cbd02daa036scroggo png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) 4233965825b97a5809454f5810f7e603cbd02daa036scroggo{ 4243965825b97a5809454f5810f7e603cbd02daa036scroggo png_uint_32 retval = 0; 4253965825b97a5809454f5810f7e603cbd02daa036scroggo 4263965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 4273965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_pHYs) != 0) 4283965825b97a5809454f5810f7e603cbd02daa036scroggo { 4293965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "pHYs"); 4303965825b97a5809454f5810f7e603cbd02daa036scroggo 4313965825b97a5809454f5810f7e603cbd02daa036scroggo if (res_x != NULL) 4323965825b97a5809454f5810f7e603cbd02daa036scroggo { 4333965825b97a5809454f5810f7e603cbd02daa036scroggo *res_x = info_ptr->x_pixels_per_unit; 4343965825b97a5809454f5810f7e603cbd02daa036scroggo retval |= PNG_INFO_pHYs; 4353965825b97a5809454f5810f7e603cbd02daa036scroggo } 4363965825b97a5809454f5810f7e603cbd02daa036scroggo 4373965825b97a5809454f5810f7e603cbd02daa036scroggo if (res_y != NULL) 4383965825b97a5809454f5810f7e603cbd02daa036scroggo { 4393965825b97a5809454f5810f7e603cbd02daa036scroggo *res_y = info_ptr->y_pixels_per_unit; 4403965825b97a5809454f5810f7e603cbd02daa036scroggo retval |= PNG_INFO_pHYs; 4413965825b97a5809454f5810f7e603cbd02daa036scroggo } 4423965825b97a5809454f5810f7e603cbd02daa036scroggo 4433965825b97a5809454f5810f7e603cbd02daa036scroggo if (unit_type != NULL) 4443965825b97a5809454f5810f7e603cbd02daa036scroggo { 4453965825b97a5809454f5810f7e603cbd02daa036scroggo *unit_type = (int)info_ptr->phys_unit_type; 4463965825b97a5809454f5810f7e603cbd02daa036scroggo retval |= PNG_INFO_pHYs; 4473965825b97a5809454f5810f7e603cbd02daa036scroggo 4483965825b97a5809454f5810f7e603cbd02daa036scroggo if (*unit_type == 1) 4493965825b97a5809454f5810f7e603cbd02daa036scroggo { 4503965825b97a5809454f5810f7e603cbd02daa036scroggo if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50); 4513965825b97a5809454f5810f7e603cbd02daa036scroggo if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50); 4523965825b97a5809454f5810f7e603cbd02daa036scroggo } 4533965825b97a5809454f5810f7e603cbd02daa036scroggo } 4543965825b97a5809454f5810f7e603cbd02daa036scroggo } 4553965825b97a5809454f5810f7e603cbd02daa036scroggo 4563965825b97a5809454f5810f7e603cbd02daa036scroggo return (retval); 4573965825b97a5809454f5810f7e603cbd02daa036scroggo} 4583965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* pHYs */ 4593965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* INCH_CONVERSIONS */ 4603965825b97a5809454f5810f7e603cbd02daa036scroggo 4613965825b97a5809454f5810f7e603cbd02daa036scroggo/* png_get_channels really belongs in here, too, but it's been around longer */ 4623965825b97a5809454f5810f7e603cbd02daa036scroggo 4633965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* EASY_ACCESS */ 4643965825b97a5809454f5810f7e603cbd02daa036scroggo 4653965825b97a5809454f5810f7e603cbd02daa036scroggo 4663965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI 4673965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_channels(png_const_structrp png_ptr, png_const_inforp info_ptr) 4683965825b97a5809454f5810f7e603cbd02daa036scroggo{ 4693965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 4703965825b97a5809454f5810f7e603cbd02daa036scroggo return(info_ptr->channels); 4713965825b97a5809454f5810f7e603cbd02daa036scroggo 4723965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 4733965825b97a5809454f5810f7e603cbd02daa036scroggo} 4743965825b97a5809454f5810f7e603cbd02daa036scroggo 4753965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_READ_SUPPORTED 4763965825b97a5809454f5810f7e603cbd02daa036scroggopng_const_bytep PNGAPI 4773965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_signature(png_const_structrp png_ptr, png_const_inforp info_ptr) 4783965825b97a5809454f5810f7e603cbd02daa036scroggo{ 4793965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 4803965825b97a5809454f5810f7e603cbd02daa036scroggo return(info_ptr->signature); 4813965825b97a5809454f5810f7e603cbd02daa036scroggo 4823965825b97a5809454f5810f7e603cbd02daa036scroggo return (NULL); 4833965825b97a5809454f5810f7e603cbd02daa036scroggo} 4843965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 4853965825b97a5809454f5810f7e603cbd02daa036scroggo 4863965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_bKGD_SUPPORTED 4873965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 4883965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_bKGD(png_const_structrp png_ptr, png_inforp info_ptr, 4893965825b97a5809454f5810f7e603cbd02daa036scroggo png_color_16p *background) 4903965825b97a5809454f5810f7e603cbd02daa036scroggo{ 4913965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 4923965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_bKGD) != 0 && 4933965825b97a5809454f5810f7e603cbd02daa036scroggo background != NULL) 4943965825b97a5809454f5810f7e603cbd02daa036scroggo { 4953965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "bKGD"); 4963965825b97a5809454f5810f7e603cbd02daa036scroggo 4973965825b97a5809454f5810f7e603cbd02daa036scroggo *background = &(info_ptr->background); 4983965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_bKGD); 4993965825b97a5809454f5810f7e603cbd02daa036scroggo } 5003965825b97a5809454f5810f7e603cbd02daa036scroggo 5013965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 5023965825b97a5809454f5810f7e603cbd02daa036scroggo} 5033965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 5043965825b97a5809454f5810f7e603cbd02daa036scroggo 5053965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_cHRM_SUPPORTED 5063965825b97a5809454f5810f7e603cbd02daa036scroggo/* The XYZ APIs were added in 1.5.5 to take advantage of the code added at the 5073965825b97a5809454f5810f7e603cbd02daa036scroggo * same time to correct the rgb grayscale coefficient defaults obtained from the 5083965825b97a5809454f5810f7e603cbd02daa036scroggo * cHRM chunk in 1.5.4 5093965825b97a5809454f5810f7e603cbd02daa036scroggo */ 5103965825b97a5809454f5810f7e603cbd02daa036scroggo# ifdef PNG_FLOATING_POINT_SUPPORTED 5113965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 5123965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr, 5133965825b97a5809454f5810f7e603cbd02daa036scroggo double *white_x, double *white_y, double *red_x, double *red_y, 5143965825b97a5809454f5810f7e603cbd02daa036scroggo double *green_x, double *green_y, double *blue_x, double *blue_y) 5153965825b97a5809454f5810f7e603cbd02daa036scroggo{ 5163965825b97a5809454f5810f7e603cbd02daa036scroggo /* Quiet API change: this code used to only return the end points if a cHRM 5173965825b97a5809454f5810f7e603cbd02daa036scroggo * chunk was present, but the end points can also come from iCCP or sRGB 5183965825b97a5809454f5810f7e603cbd02daa036scroggo * chunks, so in 1.6.0 the png_get_ APIs return the end points regardless and 5193965825b97a5809454f5810f7e603cbd02daa036scroggo * the png_set_ APIs merely check that set end points are mutually 5203965825b97a5809454f5810f7e603cbd02daa036scroggo * consistent. 5213965825b97a5809454f5810f7e603cbd02daa036scroggo */ 5223965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 5233965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0) 5243965825b97a5809454f5810f7e603cbd02daa036scroggo { 5253965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "cHRM"); 5263965825b97a5809454f5810f7e603cbd02daa036scroggo 5273965825b97a5809454f5810f7e603cbd02daa036scroggo if (white_x != NULL) 5283965825b97a5809454f5810f7e603cbd02daa036scroggo *white_x = png_float(png_ptr, 5293965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->colorspace.end_points_xy.whitex, "cHRM white X"); 5303965825b97a5809454f5810f7e603cbd02daa036scroggo if (white_y != NULL) 5313965825b97a5809454f5810f7e603cbd02daa036scroggo *white_y = png_float(png_ptr, 5323965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->colorspace.end_points_xy.whitey, "cHRM white Y"); 5333965825b97a5809454f5810f7e603cbd02daa036scroggo if (red_x != NULL) 5343965825b97a5809454f5810f7e603cbd02daa036scroggo *red_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redx, 5353965825b97a5809454f5810f7e603cbd02daa036scroggo "cHRM red X"); 5363965825b97a5809454f5810f7e603cbd02daa036scroggo if (red_y != NULL) 5373965825b97a5809454f5810f7e603cbd02daa036scroggo *red_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redy, 5383965825b97a5809454f5810f7e603cbd02daa036scroggo "cHRM red Y"); 5393965825b97a5809454f5810f7e603cbd02daa036scroggo if (green_x != NULL) 5403965825b97a5809454f5810f7e603cbd02daa036scroggo *green_x = png_float(png_ptr, 5413965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->colorspace.end_points_xy.greenx, "cHRM green X"); 5423965825b97a5809454f5810f7e603cbd02daa036scroggo if (green_y != NULL) 5433965825b97a5809454f5810f7e603cbd02daa036scroggo *green_y = png_float(png_ptr, 5443965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->colorspace.end_points_xy.greeny, "cHRM green Y"); 5453965825b97a5809454f5810f7e603cbd02daa036scroggo if (blue_x != NULL) 5463965825b97a5809454f5810f7e603cbd02daa036scroggo *blue_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluex, 5473965825b97a5809454f5810f7e603cbd02daa036scroggo "cHRM blue X"); 5483965825b97a5809454f5810f7e603cbd02daa036scroggo if (blue_y != NULL) 5493965825b97a5809454f5810f7e603cbd02daa036scroggo *blue_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluey, 5503965825b97a5809454f5810f7e603cbd02daa036scroggo "cHRM blue Y"); 5513965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_cHRM); 5523965825b97a5809454f5810f7e603cbd02daa036scroggo } 5533965825b97a5809454f5810f7e603cbd02daa036scroggo 5543965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 5553965825b97a5809454f5810f7e603cbd02daa036scroggo} 5563965825b97a5809454f5810f7e603cbd02daa036scroggo 5573965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 5583965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr, 5593965825b97a5809454f5810f7e603cbd02daa036scroggo double *red_X, double *red_Y, double *red_Z, double *green_X, 5603965825b97a5809454f5810f7e603cbd02daa036scroggo double *green_Y, double *green_Z, double *blue_X, double *blue_Y, 5613965825b97a5809454f5810f7e603cbd02daa036scroggo double *blue_Z) 5623965825b97a5809454f5810f7e603cbd02daa036scroggo{ 5633965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 5643965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0) 5653965825b97a5809454f5810f7e603cbd02daa036scroggo { 5663965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "cHRM_XYZ(float)"); 5673965825b97a5809454f5810f7e603cbd02daa036scroggo 5683965825b97a5809454f5810f7e603cbd02daa036scroggo if (red_X != NULL) 5693965825b97a5809454f5810f7e603cbd02daa036scroggo *red_X = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_X, 5703965825b97a5809454f5810f7e603cbd02daa036scroggo "cHRM red X"); 5713965825b97a5809454f5810f7e603cbd02daa036scroggo if (red_Y != NULL) 5723965825b97a5809454f5810f7e603cbd02daa036scroggo *red_Y = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Y, 5733965825b97a5809454f5810f7e603cbd02daa036scroggo "cHRM red Y"); 5743965825b97a5809454f5810f7e603cbd02daa036scroggo if (red_Z != NULL) 5753965825b97a5809454f5810f7e603cbd02daa036scroggo *red_Z = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Z, 5763965825b97a5809454f5810f7e603cbd02daa036scroggo "cHRM red Z"); 5773965825b97a5809454f5810f7e603cbd02daa036scroggo if (green_X != NULL) 5783965825b97a5809454f5810f7e603cbd02daa036scroggo *green_X = png_float(png_ptr, 5793965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->colorspace.end_points_XYZ.green_X, "cHRM green X"); 5803965825b97a5809454f5810f7e603cbd02daa036scroggo if (green_Y != NULL) 5813965825b97a5809454f5810f7e603cbd02daa036scroggo *green_Y = png_float(png_ptr, 5823965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->colorspace.end_points_XYZ.green_Y, "cHRM green Y"); 5833965825b97a5809454f5810f7e603cbd02daa036scroggo if (green_Z != NULL) 5843965825b97a5809454f5810f7e603cbd02daa036scroggo *green_Z = png_float(png_ptr, 5853965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->colorspace.end_points_XYZ.green_Z, "cHRM green Z"); 5863965825b97a5809454f5810f7e603cbd02daa036scroggo if (blue_X != NULL) 5873965825b97a5809454f5810f7e603cbd02daa036scroggo *blue_X = png_float(png_ptr, 5883965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->colorspace.end_points_XYZ.blue_X, "cHRM blue X"); 5893965825b97a5809454f5810f7e603cbd02daa036scroggo if (blue_Y != NULL) 5903965825b97a5809454f5810f7e603cbd02daa036scroggo *blue_Y = png_float(png_ptr, 5913965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->colorspace.end_points_XYZ.blue_Y, "cHRM blue Y"); 5923965825b97a5809454f5810f7e603cbd02daa036scroggo if (blue_Z != NULL) 5933965825b97a5809454f5810f7e603cbd02daa036scroggo *blue_Z = png_float(png_ptr, 5943965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->colorspace.end_points_XYZ.blue_Z, "cHRM blue Z"); 5953965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_cHRM); 5963965825b97a5809454f5810f7e603cbd02daa036scroggo } 5973965825b97a5809454f5810f7e603cbd02daa036scroggo 5983965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 5993965825b97a5809454f5810f7e603cbd02daa036scroggo} 6003965825b97a5809454f5810f7e603cbd02daa036scroggo# endif 6013965825b97a5809454f5810f7e603cbd02daa036scroggo 6023965825b97a5809454f5810f7e603cbd02daa036scroggo# ifdef PNG_FIXED_POINT_SUPPORTED 6033965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 6043965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_cHRM_XYZ_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr, 6053965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point *int_red_X, png_fixed_point *int_red_Y, 6063965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point *int_red_Z, png_fixed_point *int_green_X, 6073965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, 6083965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, 6093965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point *int_blue_Z) 6103965825b97a5809454f5810f7e603cbd02daa036scroggo{ 6113965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 6123965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0) 6133965825b97a5809454f5810f7e603cbd02daa036scroggo { 6143965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "cHRM_XYZ"); 6153965825b97a5809454f5810f7e603cbd02daa036scroggo 6163965825b97a5809454f5810f7e603cbd02daa036scroggo if (int_red_X != NULL) 6173965825b97a5809454f5810f7e603cbd02daa036scroggo *int_red_X = info_ptr->colorspace.end_points_XYZ.red_X; 6183965825b97a5809454f5810f7e603cbd02daa036scroggo if (int_red_Y != NULL) 6193965825b97a5809454f5810f7e603cbd02daa036scroggo *int_red_Y = info_ptr->colorspace.end_points_XYZ.red_Y; 6203965825b97a5809454f5810f7e603cbd02daa036scroggo if (int_red_Z != NULL) 6213965825b97a5809454f5810f7e603cbd02daa036scroggo *int_red_Z = info_ptr->colorspace.end_points_XYZ.red_Z; 6223965825b97a5809454f5810f7e603cbd02daa036scroggo if (int_green_X != NULL) 6233965825b97a5809454f5810f7e603cbd02daa036scroggo *int_green_X = info_ptr->colorspace.end_points_XYZ.green_X; 6243965825b97a5809454f5810f7e603cbd02daa036scroggo if (int_green_Y != NULL) 6253965825b97a5809454f5810f7e603cbd02daa036scroggo *int_green_Y = info_ptr->colorspace.end_points_XYZ.green_Y; 6263965825b97a5809454f5810f7e603cbd02daa036scroggo if (int_green_Z != NULL) 6273965825b97a5809454f5810f7e603cbd02daa036scroggo *int_green_Z = info_ptr->colorspace.end_points_XYZ.green_Z; 6283965825b97a5809454f5810f7e603cbd02daa036scroggo if (int_blue_X != NULL) 6293965825b97a5809454f5810f7e603cbd02daa036scroggo *int_blue_X = info_ptr->colorspace.end_points_XYZ.blue_X; 6303965825b97a5809454f5810f7e603cbd02daa036scroggo if (int_blue_Y != NULL) 6313965825b97a5809454f5810f7e603cbd02daa036scroggo *int_blue_Y = info_ptr->colorspace.end_points_XYZ.blue_Y; 6323965825b97a5809454f5810f7e603cbd02daa036scroggo if (int_blue_Z != NULL) 6333965825b97a5809454f5810f7e603cbd02daa036scroggo *int_blue_Z = info_ptr->colorspace.end_points_XYZ.blue_Z; 6343965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_cHRM); 6353965825b97a5809454f5810f7e603cbd02daa036scroggo } 6363965825b97a5809454f5810f7e603cbd02daa036scroggo 6373965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 6383965825b97a5809454f5810f7e603cbd02daa036scroggo} 6393965825b97a5809454f5810f7e603cbd02daa036scroggo 6403965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 6413965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_cHRM_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr, 6423965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x, 6433965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y, 6443965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point *blue_x, png_fixed_point *blue_y) 6453965825b97a5809454f5810f7e603cbd02daa036scroggo{ 6463965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "cHRM"); 6473965825b97a5809454f5810f7e603cbd02daa036scroggo 6483965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 6493965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0) 6503965825b97a5809454f5810f7e603cbd02daa036scroggo { 6513965825b97a5809454f5810f7e603cbd02daa036scroggo if (white_x != NULL) 6523965825b97a5809454f5810f7e603cbd02daa036scroggo *white_x = info_ptr->colorspace.end_points_xy.whitex; 6533965825b97a5809454f5810f7e603cbd02daa036scroggo if (white_y != NULL) 6543965825b97a5809454f5810f7e603cbd02daa036scroggo *white_y = info_ptr->colorspace.end_points_xy.whitey; 6553965825b97a5809454f5810f7e603cbd02daa036scroggo if (red_x != NULL) 6563965825b97a5809454f5810f7e603cbd02daa036scroggo *red_x = info_ptr->colorspace.end_points_xy.redx; 6573965825b97a5809454f5810f7e603cbd02daa036scroggo if (red_y != NULL) 6583965825b97a5809454f5810f7e603cbd02daa036scroggo *red_y = info_ptr->colorspace.end_points_xy.redy; 6593965825b97a5809454f5810f7e603cbd02daa036scroggo if (green_x != NULL) 6603965825b97a5809454f5810f7e603cbd02daa036scroggo *green_x = info_ptr->colorspace.end_points_xy.greenx; 6613965825b97a5809454f5810f7e603cbd02daa036scroggo if (green_y != NULL) 6623965825b97a5809454f5810f7e603cbd02daa036scroggo *green_y = info_ptr->colorspace.end_points_xy.greeny; 6633965825b97a5809454f5810f7e603cbd02daa036scroggo if (blue_x != NULL) 6643965825b97a5809454f5810f7e603cbd02daa036scroggo *blue_x = info_ptr->colorspace.end_points_xy.bluex; 6653965825b97a5809454f5810f7e603cbd02daa036scroggo if (blue_y != NULL) 6663965825b97a5809454f5810f7e603cbd02daa036scroggo *blue_y = info_ptr->colorspace.end_points_xy.bluey; 6673965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_cHRM); 6683965825b97a5809454f5810f7e603cbd02daa036scroggo } 6693965825b97a5809454f5810f7e603cbd02daa036scroggo 6703965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 6713965825b97a5809454f5810f7e603cbd02daa036scroggo} 6723965825b97a5809454f5810f7e603cbd02daa036scroggo# endif 6733965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 6743965825b97a5809454f5810f7e603cbd02daa036scroggo 6753965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_gAMA_SUPPORTED 6763965825b97a5809454f5810f7e603cbd02daa036scroggo# ifdef PNG_FIXED_POINT_SUPPORTED 6773965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 6783965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_gAMA_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr, 6793965825b97a5809454f5810f7e603cbd02daa036scroggo png_fixed_point *file_gamma) 6803965825b97a5809454f5810f7e603cbd02daa036scroggo{ 6813965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "gAMA"); 6823965825b97a5809454f5810f7e603cbd02daa036scroggo 6833965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 6843965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 && 6853965825b97a5809454f5810f7e603cbd02daa036scroggo file_gamma != NULL) 6863965825b97a5809454f5810f7e603cbd02daa036scroggo { 6873965825b97a5809454f5810f7e603cbd02daa036scroggo *file_gamma = info_ptr->colorspace.gamma; 6883965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_gAMA); 6893965825b97a5809454f5810f7e603cbd02daa036scroggo } 6903965825b97a5809454f5810f7e603cbd02daa036scroggo 6913965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 6923965825b97a5809454f5810f7e603cbd02daa036scroggo} 6933965825b97a5809454f5810f7e603cbd02daa036scroggo# endif 6943965825b97a5809454f5810f7e603cbd02daa036scroggo 6953965825b97a5809454f5810f7e603cbd02daa036scroggo# ifdef PNG_FLOATING_POINT_SUPPORTED 6963965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 6973965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_gAMA(png_const_structrp png_ptr, png_const_inforp info_ptr, 6983965825b97a5809454f5810f7e603cbd02daa036scroggo double *file_gamma) 6993965825b97a5809454f5810f7e603cbd02daa036scroggo{ 7003965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "gAMA(float)"); 7013965825b97a5809454f5810f7e603cbd02daa036scroggo 7023965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 7033965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 && 7043965825b97a5809454f5810f7e603cbd02daa036scroggo file_gamma != NULL) 7053965825b97a5809454f5810f7e603cbd02daa036scroggo { 7063965825b97a5809454f5810f7e603cbd02daa036scroggo *file_gamma = png_float(png_ptr, info_ptr->colorspace.gamma, 7073965825b97a5809454f5810f7e603cbd02daa036scroggo "png_get_gAMA"); 7083965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_gAMA); 7093965825b97a5809454f5810f7e603cbd02daa036scroggo } 7103965825b97a5809454f5810f7e603cbd02daa036scroggo 7113965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 7123965825b97a5809454f5810f7e603cbd02daa036scroggo} 7133965825b97a5809454f5810f7e603cbd02daa036scroggo# endif 7143965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 7153965825b97a5809454f5810f7e603cbd02daa036scroggo 7163965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_sRGB_SUPPORTED 7173965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 7183965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sRGB(png_const_structrp png_ptr, png_const_inforp info_ptr, 7193965825b97a5809454f5810f7e603cbd02daa036scroggo int *file_srgb_intent) 7203965825b97a5809454f5810f7e603cbd02daa036scroggo{ 7213965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "sRGB"); 7223965825b97a5809454f5810f7e603cbd02daa036scroggo 7233965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 7243965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_sRGB) != 0 && file_srgb_intent != NULL) 7253965825b97a5809454f5810f7e603cbd02daa036scroggo { 7263965825b97a5809454f5810f7e603cbd02daa036scroggo *file_srgb_intent = info_ptr->colorspace.rendering_intent; 7273965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_sRGB); 7283965825b97a5809454f5810f7e603cbd02daa036scroggo } 7293965825b97a5809454f5810f7e603cbd02daa036scroggo 7303965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 7313965825b97a5809454f5810f7e603cbd02daa036scroggo} 7323965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 7333965825b97a5809454f5810f7e603cbd02daa036scroggo 7343965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_iCCP_SUPPORTED 7353965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 7363965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_iCCP(png_const_structrp png_ptr, png_inforp info_ptr, 7373965825b97a5809454f5810f7e603cbd02daa036scroggo png_charpp name, int *compression_type, 7383965825b97a5809454f5810f7e603cbd02daa036scroggo png_bytepp profile, png_uint_32 *proflen) 7393965825b97a5809454f5810f7e603cbd02daa036scroggo{ 7403965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "iCCP"); 7413965825b97a5809454f5810f7e603cbd02daa036scroggo 7423965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 7433965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_iCCP) != 0 && 7443965825b97a5809454f5810f7e603cbd02daa036scroggo name != NULL && compression_type != NULL && profile != NULL && 7453965825b97a5809454f5810f7e603cbd02daa036scroggo proflen != NULL) 7463965825b97a5809454f5810f7e603cbd02daa036scroggo { 7473965825b97a5809454f5810f7e603cbd02daa036scroggo *name = info_ptr->iccp_name; 7483965825b97a5809454f5810f7e603cbd02daa036scroggo *profile = info_ptr->iccp_profile; 7493965825b97a5809454f5810f7e603cbd02daa036scroggo *proflen = png_get_uint_32(info_ptr->iccp_profile); 7503965825b97a5809454f5810f7e603cbd02daa036scroggo /* This is somewhat irrelevant since the profile data returned has 7513965825b97a5809454f5810f7e603cbd02daa036scroggo * actually been uncompressed. 7523965825b97a5809454f5810f7e603cbd02daa036scroggo */ 7533965825b97a5809454f5810f7e603cbd02daa036scroggo *compression_type = PNG_COMPRESSION_TYPE_BASE; 7543965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_iCCP); 7553965825b97a5809454f5810f7e603cbd02daa036scroggo } 7563965825b97a5809454f5810f7e603cbd02daa036scroggo 7573965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 7583965825b97a5809454f5810f7e603cbd02daa036scroggo} 7593965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 7603965825b97a5809454f5810f7e603cbd02daa036scroggo 7613965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_sPLT_SUPPORTED 7623965825b97a5809454f5810f7e603cbd02daa036scroggoint PNGAPI 7633965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sPLT(png_const_structrp png_ptr, png_inforp info_ptr, 7643965825b97a5809454f5810f7e603cbd02daa036scroggo png_sPLT_tpp spalettes) 7653965825b97a5809454f5810f7e603cbd02daa036scroggo{ 7663965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL) 7673965825b97a5809454f5810f7e603cbd02daa036scroggo { 7683965825b97a5809454f5810f7e603cbd02daa036scroggo *spalettes = info_ptr->splt_palettes; 7693965825b97a5809454f5810f7e603cbd02daa036scroggo return info_ptr->splt_palettes_num; 7703965825b97a5809454f5810f7e603cbd02daa036scroggo } 7713965825b97a5809454f5810f7e603cbd02daa036scroggo 7723965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 7733965825b97a5809454f5810f7e603cbd02daa036scroggo} 7743965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 7753965825b97a5809454f5810f7e603cbd02daa036scroggo 7763965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_hIST_SUPPORTED 7773965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 7783965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_hIST(png_const_structrp png_ptr, png_inforp info_ptr, 7793965825b97a5809454f5810f7e603cbd02daa036scroggo png_uint_16p *hist) 7803965825b97a5809454f5810f7e603cbd02daa036scroggo{ 7813965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "hIST"); 7823965825b97a5809454f5810f7e603cbd02daa036scroggo 7833965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 7843965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_hIST) != 0 && hist != NULL) 7853965825b97a5809454f5810f7e603cbd02daa036scroggo { 7863965825b97a5809454f5810f7e603cbd02daa036scroggo *hist = info_ptr->hist; 7873965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_hIST); 7883965825b97a5809454f5810f7e603cbd02daa036scroggo } 7893965825b97a5809454f5810f7e603cbd02daa036scroggo 7903965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 7913965825b97a5809454f5810f7e603cbd02daa036scroggo} 7923965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 7933965825b97a5809454f5810f7e603cbd02daa036scroggo 7943965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 7953965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_IHDR(png_const_structrp png_ptr, png_const_inforp info_ptr, 7963965825b97a5809454f5810f7e603cbd02daa036scroggo png_uint_32 *width, png_uint_32 *height, int *bit_depth, 7973965825b97a5809454f5810f7e603cbd02daa036scroggo int *color_type, int *interlace_type, int *compression_type, 7983965825b97a5809454f5810f7e603cbd02daa036scroggo int *filter_type) 7993965825b97a5809454f5810f7e603cbd02daa036scroggo{ 8003965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "IHDR"); 8013965825b97a5809454f5810f7e603cbd02daa036scroggo 8023965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr == NULL || info_ptr == NULL) 8033965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 8043965825b97a5809454f5810f7e603cbd02daa036scroggo 8053965825b97a5809454f5810f7e603cbd02daa036scroggo if (width != NULL) 8063965825b97a5809454f5810f7e603cbd02daa036scroggo *width = info_ptr->width; 8073965825b97a5809454f5810f7e603cbd02daa036scroggo 8083965825b97a5809454f5810f7e603cbd02daa036scroggo if (height != NULL) 8093965825b97a5809454f5810f7e603cbd02daa036scroggo *height = info_ptr->height; 8103965825b97a5809454f5810f7e603cbd02daa036scroggo 8113965825b97a5809454f5810f7e603cbd02daa036scroggo if (bit_depth != NULL) 8123965825b97a5809454f5810f7e603cbd02daa036scroggo *bit_depth = info_ptr->bit_depth; 8133965825b97a5809454f5810f7e603cbd02daa036scroggo 8143965825b97a5809454f5810f7e603cbd02daa036scroggo if (color_type != NULL) 8153965825b97a5809454f5810f7e603cbd02daa036scroggo *color_type = info_ptr->color_type; 8163965825b97a5809454f5810f7e603cbd02daa036scroggo 8173965825b97a5809454f5810f7e603cbd02daa036scroggo if (compression_type != NULL) 8183965825b97a5809454f5810f7e603cbd02daa036scroggo *compression_type = info_ptr->compression_type; 8193965825b97a5809454f5810f7e603cbd02daa036scroggo 8203965825b97a5809454f5810f7e603cbd02daa036scroggo if (filter_type != NULL) 8213965825b97a5809454f5810f7e603cbd02daa036scroggo *filter_type = info_ptr->filter_type; 8223965825b97a5809454f5810f7e603cbd02daa036scroggo 8233965825b97a5809454f5810f7e603cbd02daa036scroggo if (interlace_type != NULL) 8243965825b97a5809454f5810f7e603cbd02daa036scroggo *interlace_type = info_ptr->interlace_type; 8253965825b97a5809454f5810f7e603cbd02daa036scroggo 8263965825b97a5809454f5810f7e603cbd02daa036scroggo /* This is redundant if we can be sure that the info_ptr values were all 8273965825b97a5809454f5810f7e603cbd02daa036scroggo * assigned in png_set_IHDR(). We do the check anyhow in case an 8283965825b97a5809454f5810f7e603cbd02daa036scroggo * application has ignored our advice not to mess with the members 8293965825b97a5809454f5810f7e603cbd02daa036scroggo * of info_ptr directly. 8303965825b97a5809454f5810f7e603cbd02daa036scroggo */ 8313965825b97a5809454f5810f7e603cbd02daa036scroggo png_check_IHDR(png_ptr, info_ptr->width, info_ptr->height, 8323965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type, 8333965825b97a5809454f5810f7e603cbd02daa036scroggo info_ptr->compression_type, info_ptr->filter_type); 8343965825b97a5809454f5810f7e603cbd02daa036scroggo 8353965825b97a5809454f5810f7e603cbd02daa036scroggo return (1); 8363965825b97a5809454f5810f7e603cbd02daa036scroggo} 8373965825b97a5809454f5810f7e603cbd02daa036scroggo 8383965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_oFFs_SUPPORTED 8393965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 8403965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_oFFs(png_const_structrp png_ptr, png_const_inforp info_ptr, 8413965825b97a5809454f5810f7e603cbd02daa036scroggo png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type) 8423965825b97a5809454f5810f7e603cbd02daa036scroggo{ 8433965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "oFFs"); 8443965825b97a5809454f5810f7e603cbd02daa036scroggo 8453965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 8463965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_oFFs) != 0 && 8473965825b97a5809454f5810f7e603cbd02daa036scroggo offset_x != NULL && offset_y != NULL && unit_type != NULL) 8483965825b97a5809454f5810f7e603cbd02daa036scroggo { 8493965825b97a5809454f5810f7e603cbd02daa036scroggo *offset_x = info_ptr->x_offset; 8503965825b97a5809454f5810f7e603cbd02daa036scroggo *offset_y = info_ptr->y_offset; 8513965825b97a5809454f5810f7e603cbd02daa036scroggo *unit_type = (int)info_ptr->offset_unit_type; 8523965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_oFFs); 8533965825b97a5809454f5810f7e603cbd02daa036scroggo } 8543965825b97a5809454f5810f7e603cbd02daa036scroggo 8553965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 8563965825b97a5809454f5810f7e603cbd02daa036scroggo} 8573965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 8583965825b97a5809454f5810f7e603cbd02daa036scroggo 8593965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pCAL_SUPPORTED 8603965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 8613965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pCAL(png_const_structrp png_ptr, png_inforp info_ptr, 8623965825b97a5809454f5810f7e603cbd02daa036scroggo png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams, 8633965825b97a5809454f5810f7e603cbd02daa036scroggo png_charp *units, png_charpp *params) 8643965825b97a5809454f5810f7e603cbd02daa036scroggo{ 8653965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "pCAL"); 8663965825b97a5809454f5810f7e603cbd02daa036scroggo 8673965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 8683965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_pCAL) != 0 && 8693965825b97a5809454f5810f7e603cbd02daa036scroggo purpose != NULL && X0 != NULL && X1 != NULL && type != NULL && 8703965825b97a5809454f5810f7e603cbd02daa036scroggo nparams != NULL && units != NULL && params != NULL) 8713965825b97a5809454f5810f7e603cbd02daa036scroggo { 8723965825b97a5809454f5810f7e603cbd02daa036scroggo *purpose = info_ptr->pcal_purpose; 8733965825b97a5809454f5810f7e603cbd02daa036scroggo *X0 = info_ptr->pcal_X0; 8743965825b97a5809454f5810f7e603cbd02daa036scroggo *X1 = info_ptr->pcal_X1; 8753965825b97a5809454f5810f7e603cbd02daa036scroggo *type = (int)info_ptr->pcal_type; 8763965825b97a5809454f5810f7e603cbd02daa036scroggo *nparams = (int)info_ptr->pcal_nparams; 8773965825b97a5809454f5810f7e603cbd02daa036scroggo *units = info_ptr->pcal_units; 8783965825b97a5809454f5810f7e603cbd02daa036scroggo *params = info_ptr->pcal_params; 8793965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_pCAL); 8803965825b97a5809454f5810f7e603cbd02daa036scroggo } 8813965825b97a5809454f5810f7e603cbd02daa036scroggo 8823965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 8833965825b97a5809454f5810f7e603cbd02daa036scroggo} 8843965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 8853965825b97a5809454f5810f7e603cbd02daa036scroggo 8863965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_sCAL_SUPPORTED 8873965825b97a5809454f5810f7e603cbd02daa036scroggo# ifdef PNG_FIXED_POINT_SUPPORTED 8883965825b97a5809454f5810f7e603cbd02daa036scroggo# if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \ 8893965825b97a5809454f5810f7e603cbd02daa036scroggo defined(PNG_FLOATING_POINT_SUPPORTED) 8903965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 8913965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr, 8923965825b97a5809454f5810f7e603cbd02daa036scroggo int *unit, png_fixed_point *width, png_fixed_point *height) 8933965825b97a5809454f5810f7e603cbd02daa036scroggo{ 8943965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 8953965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_sCAL) != 0) 8963965825b97a5809454f5810f7e603cbd02daa036scroggo { 8973965825b97a5809454f5810f7e603cbd02daa036scroggo *unit = info_ptr->scal_unit; 8983965825b97a5809454f5810f7e603cbd02daa036scroggo /*TODO: make this work without FP support; the API is currently eliminated 8993965825b97a5809454f5810f7e603cbd02daa036scroggo * if neither floating point APIs nor internal floating point arithmetic 9003965825b97a5809454f5810f7e603cbd02daa036scroggo * are enabled. 9013965825b97a5809454f5810f7e603cbd02daa036scroggo */ 9023965825b97a5809454f5810f7e603cbd02daa036scroggo *width = png_fixed(png_ptr, atof(info_ptr->scal_s_width), "sCAL width"); 9033965825b97a5809454f5810f7e603cbd02daa036scroggo *height = png_fixed(png_ptr, atof(info_ptr->scal_s_height), 9043965825b97a5809454f5810f7e603cbd02daa036scroggo "sCAL height"); 9053965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_sCAL); 9063965825b97a5809454f5810f7e603cbd02daa036scroggo } 9073965825b97a5809454f5810f7e603cbd02daa036scroggo 9083965825b97a5809454f5810f7e603cbd02daa036scroggo return(0); 9093965825b97a5809454f5810f7e603cbd02daa036scroggo} 9103965825b97a5809454f5810f7e603cbd02daa036scroggo# endif /* FLOATING_ARITHMETIC */ 9113965825b97a5809454f5810f7e603cbd02daa036scroggo# endif /* FIXED_POINT */ 9123965825b97a5809454f5810f7e603cbd02daa036scroggo# ifdef PNG_FLOATING_POINT_SUPPORTED 9133965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 9143965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sCAL(png_const_structrp png_ptr, png_const_inforp info_ptr, 9153965825b97a5809454f5810f7e603cbd02daa036scroggo int *unit, double *width, double *height) 9163965825b97a5809454f5810f7e603cbd02daa036scroggo{ 9173965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 9183965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_sCAL) != 0) 9193965825b97a5809454f5810f7e603cbd02daa036scroggo { 9203965825b97a5809454f5810f7e603cbd02daa036scroggo *unit = info_ptr->scal_unit; 9213965825b97a5809454f5810f7e603cbd02daa036scroggo *width = atof(info_ptr->scal_s_width); 9223965825b97a5809454f5810f7e603cbd02daa036scroggo *height = atof(info_ptr->scal_s_height); 9233965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_sCAL); 9243965825b97a5809454f5810f7e603cbd02daa036scroggo } 9253965825b97a5809454f5810f7e603cbd02daa036scroggo 9263965825b97a5809454f5810f7e603cbd02daa036scroggo return(0); 9273965825b97a5809454f5810f7e603cbd02daa036scroggo} 9283965825b97a5809454f5810f7e603cbd02daa036scroggo# endif /* FLOATING POINT */ 9293965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 9303965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sCAL_s(png_const_structrp png_ptr, png_const_inforp info_ptr, 9313965825b97a5809454f5810f7e603cbd02daa036scroggo int *unit, png_charpp width, png_charpp height) 9323965825b97a5809454f5810f7e603cbd02daa036scroggo{ 9333965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 9343965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_sCAL) != 0) 9353965825b97a5809454f5810f7e603cbd02daa036scroggo { 9363965825b97a5809454f5810f7e603cbd02daa036scroggo *unit = info_ptr->scal_unit; 9373965825b97a5809454f5810f7e603cbd02daa036scroggo *width = info_ptr->scal_s_width; 9383965825b97a5809454f5810f7e603cbd02daa036scroggo *height = info_ptr->scal_s_height; 9393965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_sCAL); 9403965825b97a5809454f5810f7e603cbd02daa036scroggo } 9413965825b97a5809454f5810f7e603cbd02daa036scroggo 9423965825b97a5809454f5810f7e603cbd02daa036scroggo return(0); 9433965825b97a5809454f5810f7e603cbd02daa036scroggo} 9443965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* sCAL */ 9453965825b97a5809454f5810f7e603cbd02daa036scroggo 9463965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_pHYs_SUPPORTED 9473965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 9483965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_pHYs(png_const_structrp png_ptr, png_const_inforp info_ptr, 9493965825b97a5809454f5810f7e603cbd02daa036scroggo png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) 9503965825b97a5809454f5810f7e603cbd02daa036scroggo{ 9513965825b97a5809454f5810f7e603cbd02daa036scroggo png_uint_32 retval = 0; 9523965825b97a5809454f5810f7e603cbd02daa036scroggo 9533965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "pHYs"); 9543965825b97a5809454f5810f7e603cbd02daa036scroggo 9553965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 9563965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_pHYs) != 0) 9573965825b97a5809454f5810f7e603cbd02daa036scroggo { 9583965825b97a5809454f5810f7e603cbd02daa036scroggo if (res_x != NULL) 9593965825b97a5809454f5810f7e603cbd02daa036scroggo { 9603965825b97a5809454f5810f7e603cbd02daa036scroggo *res_x = info_ptr->x_pixels_per_unit; 9613965825b97a5809454f5810f7e603cbd02daa036scroggo retval |= PNG_INFO_pHYs; 9623965825b97a5809454f5810f7e603cbd02daa036scroggo } 9633965825b97a5809454f5810f7e603cbd02daa036scroggo 9643965825b97a5809454f5810f7e603cbd02daa036scroggo if (res_y != NULL) 9653965825b97a5809454f5810f7e603cbd02daa036scroggo { 9663965825b97a5809454f5810f7e603cbd02daa036scroggo *res_y = info_ptr->y_pixels_per_unit; 9673965825b97a5809454f5810f7e603cbd02daa036scroggo retval |= PNG_INFO_pHYs; 9683965825b97a5809454f5810f7e603cbd02daa036scroggo } 9693965825b97a5809454f5810f7e603cbd02daa036scroggo 9703965825b97a5809454f5810f7e603cbd02daa036scroggo if (unit_type != NULL) 9713965825b97a5809454f5810f7e603cbd02daa036scroggo { 9723965825b97a5809454f5810f7e603cbd02daa036scroggo *unit_type = (int)info_ptr->phys_unit_type; 9733965825b97a5809454f5810f7e603cbd02daa036scroggo retval |= PNG_INFO_pHYs; 9743965825b97a5809454f5810f7e603cbd02daa036scroggo } 9753965825b97a5809454f5810f7e603cbd02daa036scroggo } 9763965825b97a5809454f5810f7e603cbd02daa036scroggo 9773965825b97a5809454f5810f7e603cbd02daa036scroggo return (retval); 9783965825b97a5809454f5810f7e603cbd02daa036scroggo} 9793965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* pHYs */ 9803965825b97a5809454f5810f7e603cbd02daa036scroggo 9813965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 9823965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_PLTE(png_const_structrp png_ptr, png_inforp info_ptr, 9833965825b97a5809454f5810f7e603cbd02daa036scroggo png_colorp *palette, int *num_palette) 9843965825b97a5809454f5810f7e603cbd02daa036scroggo{ 9853965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "PLTE"); 9863965825b97a5809454f5810f7e603cbd02daa036scroggo 9873965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 9883965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_PLTE) != 0 && palette != NULL) 9893965825b97a5809454f5810f7e603cbd02daa036scroggo { 9903965825b97a5809454f5810f7e603cbd02daa036scroggo *palette = info_ptr->palette; 9913965825b97a5809454f5810f7e603cbd02daa036scroggo *num_palette = info_ptr->num_palette; 9923965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(3, "num_palette = %d", *num_palette); 9933965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_PLTE); 9943965825b97a5809454f5810f7e603cbd02daa036scroggo } 9953965825b97a5809454f5810f7e603cbd02daa036scroggo 9963965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 9973965825b97a5809454f5810f7e603cbd02daa036scroggo} 9983965825b97a5809454f5810f7e603cbd02daa036scroggo 9993965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_sBIT_SUPPORTED 10003965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 10013965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_sBIT(png_const_structrp png_ptr, png_inforp info_ptr, 10023965825b97a5809454f5810f7e603cbd02daa036scroggo png_color_8p *sig_bit) 10033965825b97a5809454f5810f7e603cbd02daa036scroggo{ 10043965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "sBIT"); 10053965825b97a5809454f5810f7e603cbd02daa036scroggo 10063965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 10073965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_sBIT) != 0 && sig_bit != NULL) 10083965825b97a5809454f5810f7e603cbd02daa036scroggo { 10093965825b97a5809454f5810f7e603cbd02daa036scroggo *sig_bit = &(info_ptr->sig_bit); 10103965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_sBIT); 10113965825b97a5809454f5810f7e603cbd02daa036scroggo } 10123965825b97a5809454f5810f7e603cbd02daa036scroggo 10133965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 10143965825b97a5809454f5810f7e603cbd02daa036scroggo} 10153965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 10163965825b97a5809454f5810f7e603cbd02daa036scroggo 10173965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_TEXT_SUPPORTED 10183965825b97a5809454f5810f7e603cbd02daa036scroggoint PNGAPI 10193965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_text(png_const_structrp png_ptr, png_inforp info_ptr, 10203965825b97a5809454f5810f7e603cbd02daa036scroggo png_textp *text_ptr, int *num_text) 10213965825b97a5809454f5810f7e603cbd02daa036scroggo{ 10223965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0) 10233965825b97a5809454f5810f7e603cbd02daa036scroggo { 10243965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in 0x%lx retrieval function", 10253965825b97a5809454f5810f7e603cbd02daa036scroggo (unsigned long)png_ptr->chunk_name); 10263965825b97a5809454f5810f7e603cbd02daa036scroggo 10273965825b97a5809454f5810f7e603cbd02daa036scroggo if (text_ptr != NULL) 10283965825b97a5809454f5810f7e603cbd02daa036scroggo *text_ptr = info_ptr->text; 10293965825b97a5809454f5810f7e603cbd02daa036scroggo 10303965825b97a5809454f5810f7e603cbd02daa036scroggo if (num_text != NULL) 10313965825b97a5809454f5810f7e603cbd02daa036scroggo *num_text = info_ptr->num_text; 10323965825b97a5809454f5810f7e603cbd02daa036scroggo 10333965825b97a5809454f5810f7e603cbd02daa036scroggo return info_ptr->num_text; 10343965825b97a5809454f5810f7e603cbd02daa036scroggo } 10353965825b97a5809454f5810f7e603cbd02daa036scroggo 10363965825b97a5809454f5810f7e603cbd02daa036scroggo if (num_text != NULL) 10373965825b97a5809454f5810f7e603cbd02daa036scroggo *num_text = 0; 10383965825b97a5809454f5810f7e603cbd02daa036scroggo 10393965825b97a5809454f5810f7e603cbd02daa036scroggo return(0); 10403965825b97a5809454f5810f7e603cbd02daa036scroggo} 10413965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 10423965825b97a5809454f5810f7e603cbd02daa036scroggo 10433965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_tIME_SUPPORTED 10443965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 10453965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_tIME(png_const_structrp png_ptr, png_inforp info_ptr, 10463965825b97a5809454f5810f7e603cbd02daa036scroggo png_timep *mod_time) 10473965825b97a5809454f5810f7e603cbd02daa036scroggo{ 10483965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "tIME"); 10493965825b97a5809454f5810f7e603cbd02daa036scroggo 10503965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 10513965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_tIME) != 0 && mod_time != NULL) 10523965825b97a5809454f5810f7e603cbd02daa036scroggo { 10533965825b97a5809454f5810f7e603cbd02daa036scroggo *mod_time = &(info_ptr->mod_time); 10543965825b97a5809454f5810f7e603cbd02daa036scroggo return (PNG_INFO_tIME); 10553965825b97a5809454f5810f7e603cbd02daa036scroggo } 10563965825b97a5809454f5810f7e603cbd02daa036scroggo 10573965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 10583965825b97a5809454f5810f7e603cbd02daa036scroggo} 10593965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 10603965825b97a5809454f5810f7e603cbd02daa036scroggo 10613965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_tRNS_SUPPORTED 10623965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 10633965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_tRNS(png_const_structrp png_ptr, png_inforp info_ptr, 10643965825b97a5809454f5810f7e603cbd02daa036scroggo png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color) 10653965825b97a5809454f5810f7e603cbd02daa036scroggo{ 10663965825b97a5809454f5810f7e603cbd02daa036scroggo png_uint_32 retval = 0; 10673965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && 10683965825b97a5809454f5810f7e603cbd02daa036scroggo (info_ptr->valid & PNG_INFO_tRNS) != 0) 10693965825b97a5809454f5810f7e603cbd02daa036scroggo { 10703965825b97a5809454f5810f7e603cbd02daa036scroggo png_debug1(1, "in %s retrieval function", "tRNS"); 10713965825b97a5809454f5810f7e603cbd02daa036scroggo 10723965825b97a5809454f5810f7e603cbd02daa036scroggo if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) 10733965825b97a5809454f5810f7e603cbd02daa036scroggo { 10743965825b97a5809454f5810f7e603cbd02daa036scroggo if (trans_alpha != NULL) 10753965825b97a5809454f5810f7e603cbd02daa036scroggo { 10763965825b97a5809454f5810f7e603cbd02daa036scroggo *trans_alpha = info_ptr->trans_alpha; 10773965825b97a5809454f5810f7e603cbd02daa036scroggo retval |= PNG_INFO_tRNS; 10783965825b97a5809454f5810f7e603cbd02daa036scroggo } 10793965825b97a5809454f5810f7e603cbd02daa036scroggo 10803965825b97a5809454f5810f7e603cbd02daa036scroggo if (trans_color != NULL) 10813965825b97a5809454f5810f7e603cbd02daa036scroggo *trans_color = &(info_ptr->trans_color); 10823965825b97a5809454f5810f7e603cbd02daa036scroggo } 10833965825b97a5809454f5810f7e603cbd02daa036scroggo 10843965825b97a5809454f5810f7e603cbd02daa036scroggo else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */ 10853965825b97a5809454f5810f7e603cbd02daa036scroggo { 10863965825b97a5809454f5810f7e603cbd02daa036scroggo if (trans_color != NULL) 10873965825b97a5809454f5810f7e603cbd02daa036scroggo { 10883965825b97a5809454f5810f7e603cbd02daa036scroggo *trans_color = &(info_ptr->trans_color); 10893965825b97a5809454f5810f7e603cbd02daa036scroggo retval |= PNG_INFO_tRNS; 10903965825b97a5809454f5810f7e603cbd02daa036scroggo } 10913965825b97a5809454f5810f7e603cbd02daa036scroggo 10923965825b97a5809454f5810f7e603cbd02daa036scroggo if (trans_alpha != NULL) 10933965825b97a5809454f5810f7e603cbd02daa036scroggo *trans_alpha = NULL; 10943965825b97a5809454f5810f7e603cbd02daa036scroggo } 10953965825b97a5809454f5810f7e603cbd02daa036scroggo 10963965825b97a5809454f5810f7e603cbd02daa036scroggo if (num_trans != NULL) 10973965825b97a5809454f5810f7e603cbd02daa036scroggo { 10983965825b97a5809454f5810f7e603cbd02daa036scroggo *num_trans = info_ptr->num_trans; 10993965825b97a5809454f5810f7e603cbd02daa036scroggo retval |= PNG_INFO_tRNS; 11003965825b97a5809454f5810f7e603cbd02daa036scroggo } 11013965825b97a5809454f5810f7e603cbd02daa036scroggo } 11023965825b97a5809454f5810f7e603cbd02daa036scroggo 11033965825b97a5809454f5810f7e603cbd02daa036scroggo return (retval); 11043965825b97a5809454f5810f7e603cbd02daa036scroggo} 11053965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 11063965825b97a5809454f5810f7e603cbd02daa036scroggo 11073965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED 11083965825b97a5809454f5810f7e603cbd02daa036scroggoint PNGAPI 11093965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_unknown_chunks(png_const_structrp png_ptr, png_inforp info_ptr, 11103965825b97a5809454f5810f7e603cbd02daa036scroggo png_unknown_chunkpp unknowns) 11113965825b97a5809454f5810f7e603cbd02daa036scroggo{ 11123965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL) 11133965825b97a5809454f5810f7e603cbd02daa036scroggo { 11143965825b97a5809454f5810f7e603cbd02daa036scroggo *unknowns = info_ptr->unknown_chunks; 11153965825b97a5809454f5810f7e603cbd02daa036scroggo return info_ptr->unknown_chunks_num; 11163965825b97a5809454f5810f7e603cbd02daa036scroggo } 11173965825b97a5809454f5810f7e603cbd02daa036scroggo 11183965825b97a5809454f5810f7e603cbd02daa036scroggo return (0); 11193965825b97a5809454f5810f7e603cbd02daa036scroggo} 11203965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 11213965825b97a5809454f5810f7e603cbd02daa036scroggo 11223965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED 11233965825b97a5809454f5810f7e603cbd02daa036scroggopng_byte PNGAPI 11243965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_rgb_to_gray_status (png_const_structrp png_ptr) 11253965825b97a5809454f5810f7e603cbd02daa036scroggo{ 11263965825b97a5809454f5810f7e603cbd02daa036scroggo return (png_byte)(png_ptr ? png_ptr->rgb_to_gray_status : 0); 11273965825b97a5809454f5810f7e603cbd02daa036scroggo} 11283965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 11293965825b97a5809454f5810f7e603cbd02daa036scroggo 11303965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_USER_CHUNKS_SUPPORTED 11313965825b97a5809454f5810f7e603cbd02daa036scroggopng_voidp PNGAPI 11323965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_user_chunk_ptr(png_const_structrp png_ptr) 11333965825b97a5809454f5810f7e603cbd02daa036scroggo{ 11343965825b97a5809454f5810f7e603cbd02daa036scroggo return (png_ptr ? png_ptr->user_chunk_ptr : NULL); 11353965825b97a5809454f5810f7e603cbd02daa036scroggo} 11363965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 11373965825b97a5809454f5810f7e603cbd02daa036scroggo 11383965825b97a5809454f5810f7e603cbd02daa036scroggopng_size_t PNGAPI 11393965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_compression_buffer_size(png_const_structrp png_ptr) 11403965825b97a5809454f5810f7e603cbd02daa036scroggo{ 11413965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr == NULL) 11423965825b97a5809454f5810f7e603cbd02daa036scroggo return 0; 11433965825b97a5809454f5810f7e603cbd02daa036scroggo 11443965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_WRITE_SUPPORTED 11453965825b97a5809454f5810f7e603cbd02daa036scroggo if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0) 11463965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 11473965825b97a5809454f5810f7e603cbd02daa036scroggo { 11483965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_SEQUENTIAL_READ_SUPPORTED 11493965825b97a5809454f5810f7e603cbd02daa036scroggo return png_ptr->IDAT_read_size; 11503965825b97a5809454f5810f7e603cbd02daa036scroggo#else 11513965825b97a5809454f5810f7e603cbd02daa036scroggo return PNG_IDAT_READ_SIZE; 11523965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 11533965825b97a5809454f5810f7e603cbd02daa036scroggo } 11543965825b97a5809454f5810f7e603cbd02daa036scroggo 11553965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_WRITE_SUPPORTED 11563965825b97a5809454f5810f7e603cbd02daa036scroggo else 11573965825b97a5809454f5810f7e603cbd02daa036scroggo return png_ptr->zbuffer_size; 11583965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 11593965825b97a5809454f5810f7e603cbd02daa036scroggo} 11603965825b97a5809454f5810f7e603cbd02daa036scroggo 11613965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_SET_USER_LIMITS_SUPPORTED 11623965825b97a5809454f5810f7e603cbd02daa036scroggo/* These functions were added to libpng 1.2.6 and were enabled 11633965825b97a5809454f5810f7e603cbd02daa036scroggo * by default in libpng-1.4.0 */ 11643965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 11653965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_user_width_max (png_const_structrp png_ptr) 11663965825b97a5809454f5810f7e603cbd02daa036scroggo{ 11673965825b97a5809454f5810f7e603cbd02daa036scroggo return (png_ptr ? png_ptr->user_width_max : 0); 11683965825b97a5809454f5810f7e603cbd02daa036scroggo} 11693965825b97a5809454f5810f7e603cbd02daa036scroggo 11703965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 11713965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_user_height_max (png_const_structrp png_ptr) 11723965825b97a5809454f5810f7e603cbd02daa036scroggo{ 11733965825b97a5809454f5810f7e603cbd02daa036scroggo return (png_ptr ? png_ptr->user_height_max : 0); 11743965825b97a5809454f5810f7e603cbd02daa036scroggo} 11753965825b97a5809454f5810f7e603cbd02daa036scroggo 11763965825b97a5809454f5810f7e603cbd02daa036scroggo/* This function was added to libpng 1.4.0 */ 11773965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 11783965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_chunk_cache_max (png_const_structrp png_ptr) 11793965825b97a5809454f5810f7e603cbd02daa036scroggo{ 11803965825b97a5809454f5810f7e603cbd02daa036scroggo return (png_ptr ? png_ptr->user_chunk_cache_max : 0); 11813965825b97a5809454f5810f7e603cbd02daa036scroggo} 11823965825b97a5809454f5810f7e603cbd02daa036scroggo 11833965825b97a5809454f5810f7e603cbd02daa036scroggo/* This function was added to libpng 1.4.1 */ 11843965825b97a5809454f5810f7e603cbd02daa036scroggopng_alloc_size_t PNGAPI 11853965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_chunk_malloc_max (png_const_structrp png_ptr) 11863965825b97a5809454f5810f7e603cbd02daa036scroggo{ 11873965825b97a5809454f5810f7e603cbd02daa036scroggo return (png_ptr ? png_ptr->user_chunk_malloc_max : 0); 11883965825b97a5809454f5810f7e603cbd02daa036scroggo} 11893965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* SET_USER_LIMITS */ 11903965825b97a5809454f5810f7e603cbd02daa036scroggo 11913965825b97a5809454f5810f7e603cbd02daa036scroggo/* These functions were added to libpng 1.4.0 */ 11923965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_IO_STATE_SUPPORTED 11933965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 11943965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_io_state (png_const_structrp png_ptr) 11953965825b97a5809454f5810f7e603cbd02daa036scroggo{ 11963965825b97a5809454f5810f7e603cbd02daa036scroggo return png_ptr->io_state; 11973965825b97a5809454f5810f7e603cbd02daa036scroggo} 11983965825b97a5809454f5810f7e603cbd02daa036scroggo 11993965825b97a5809454f5810f7e603cbd02daa036scroggopng_uint_32 PNGAPI 12003965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_io_chunk_type (png_const_structrp png_ptr) 12013965825b97a5809454f5810f7e603cbd02daa036scroggo{ 12023965825b97a5809454f5810f7e603cbd02daa036scroggo return png_ptr->chunk_name; 12033965825b97a5809454f5810f7e603cbd02daa036scroggo} 12043965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* IO_STATE */ 12053965825b97a5809454f5810f7e603cbd02daa036scroggo 12063965825b97a5809454f5810f7e603cbd02daa036scroggo#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED 12073965825b97a5809454f5810f7e603cbd02daa036scroggo# ifdef PNG_GET_PALETTE_MAX_SUPPORTED 12083965825b97a5809454f5810f7e603cbd02daa036scroggoint PNGAPI 12093965825b97a5809454f5810f7e603cbd02daa036scroggopng_get_palette_max(png_const_structp png_ptr, png_const_infop info_ptr) 12103965825b97a5809454f5810f7e603cbd02daa036scroggo{ 12113965825b97a5809454f5810f7e603cbd02daa036scroggo if (png_ptr != NULL && info_ptr != NULL) 12123965825b97a5809454f5810f7e603cbd02daa036scroggo return png_ptr->num_palette_max; 12133965825b97a5809454f5810f7e603cbd02daa036scroggo 12143965825b97a5809454f5810f7e603cbd02daa036scroggo return (-1); 12153965825b97a5809454f5810f7e603cbd02daa036scroggo} 12163965825b97a5809454f5810f7e603cbd02daa036scroggo# endif 12173965825b97a5809454f5810f7e603cbd02daa036scroggo#endif 12183965825b97a5809454f5810f7e603cbd02daa036scroggo 12193965825b97a5809454f5810f7e603cbd02daa036scroggo#endif /* READ || WRITE */ 1220