1 /* 2 * Copyright (C) 2007,2008 Alex Shulgin 3 * 4 * This file is part of png++ the C++ wrapper for libpng. PNG++ is free 5 * software; the exact copying conditions are as follows: 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, 11 * this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. The name of the author may not be used to endorse or promote products 18 * derived from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 23 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 25 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 #ifndef PNGPP_IMAGE_INFO_HPP_INCLUDED 32 #define PNGPP_IMAGE_INFO_HPP_INCLUDED 33 34 #include "types.hpp" 35 #include "palette.hpp" 36 #include "tRNS.hpp" 37 #include "pixel_traits.hpp" 38 39 namespace png 40 { 41 42 /** 43 * \brief Holds information about PNG image. 44 * 45 * \see image, generator, consumer 46 */ 47 class image_info 48 { 49 public: 50 /** 51 * \brief Constructs the image_info object with default values 52 * for color_type, interlace_type, compression_method and 53 * filter_type. 54 */ image_info()55 image_info() 56 : m_width(0), 57 m_height(0), 58 m_bit_depth(0), 59 m_color_type(color_type_none), 60 m_interlace_type(interlace_none), 61 m_compression_type(compression_type_default), 62 m_filter_type(filter_type_default), 63 m_gamma(0.0) 64 { 65 } 66 get_width() const67 uint_32 get_width() const 68 { 69 return m_width; 70 } 71 set_width(uint_32 width)72 void set_width(uint_32 width) 73 { 74 m_width = width; 75 } 76 get_height() const77 uint_32 get_height() const 78 { 79 return m_height; 80 } 81 set_height(uint_32 height)82 void set_height(uint_32 height) 83 { 84 m_height = height; 85 } 86 get_color_type() const87 color_type get_color_type() const 88 { 89 return m_color_type; 90 } 91 set_color_type(color_type color_space)92 void set_color_type(color_type color_space) 93 { 94 m_color_type = color_space; 95 } 96 get_bit_depth() const97 int get_bit_depth() const 98 { 99 return m_bit_depth; 100 } 101 set_bit_depth(int bit_depth)102 void set_bit_depth(int bit_depth) 103 { 104 m_bit_depth = bit_depth; 105 } 106 get_interlace_type() const107 interlace_type get_interlace_type() const 108 { 109 return m_interlace_type; 110 } 111 set_interlace_type(interlace_type interlace)112 void set_interlace_type(interlace_type interlace) 113 { 114 m_interlace_type = interlace; 115 } 116 get_compression_type() const117 compression_type get_compression_type() const 118 { 119 return m_compression_type; 120 } 121 set_compression_type(compression_type compression)122 void set_compression_type(compression_type compression) 123 { 124 m_compression_type = compression; 125 } 126 get_filter_type() const127 filter_type get_filter_type() const 128 { 129 return m_filter_type; 130 } 131 set_filter_type(filter_type filter)132 void set_filter_type(filter_type filter) 133 { 134 m_filter_type = filter; 135 } 136 get_palette() const137 palette const& get_palette() const 138 { 139 return m_palette; 140 } 141 get_palette()142 palette& get_palette() 143 { 144 return m_palette; 145 } 146 set_palette(palette const & plte)147 void set_palette(palette const& plte) 148 { 149 m_palette = plte; 150 } 151 152 /** 153 * \brief Removes all entries from the palette. 154 */ drop_palette()155 void drop_palette() 156 { 157 m_palette.clear(); 158 } 159 get_tRNS() const160 tRNS const& get_tRNS() const 161 { 162 return m_tRNS; 163 } 164 get_tRNS()165 tRNS& get_tRNS() 166 { 167 return m_tRNS; 168 } 169 set_tRNS(tRNS const & trns)170 void set_tRNS(tRNS const& trns) 171 { 172 m_tRNS = trns; 173 } 174 get_gamma() const175 double get_gamma() const 176 { 177 return m_gamma; 178 } 179 set_gamma(double gamma)180 void set_gamma(double gamma) 181 { 182 m_gamma = gamma; 183 } 184 185 protected: 186 uint_32 m_width; 187 uint_32 m_height; 188 int m_bit_depth; 189 color_type m_color_type; 190 interlace_type m_interlace_type; 191 compression_type m_compression_type; 192 filter_type m_filter_type; 193 palette m_palette; 194 tRNS m_tRNS; 195 double m_gamma; 196 }; 197 198 /** 199 * \brief Returns an image_info object with color_type and 200 * bit_depth fields setup appropriate for the \c pixel type. 201 */ 202 template< typename pixel > 203 image_info make_image_info()204 make_image_info() 205 { 206 typedef pixel_traits< pixel > traits; 207 image_info info; 208 info.set_color_type(traits::get_color_type()); 209 info.set_bit_depth(traits::get_bit_depth()); 210 return info; 211 } 212 213 } // namespace png 214 215 #endif // PNGPP_IMAGE_INFO_HPP_INCLUDED 216