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_GRAY_PIXEL_HPP_INCLUDED 32 #define PNGPP_GRAY_PIXEL_HPP_INCLUDED 33 34 #include "types.hpp" 35 #include "packed_pixel.hpp" 36 #include "pixel_traits.hpp" 37 38 namespace png 39 { 40 41 /** 42 * \brief The 8-bit Grayscale pixel type. 43 */ 44 typedef byte gray_pixel; 45 46 /** 47 * \brief The 16-bit Grayscale pixel type. 48 */ 49 typedef uint_16 gray_pixel_16; 50 51 /** 52 * \brief The packed gray pixel class template. The available 53 * specializations are for 1-, 2- and 4-bit pixels. 54 */ 55 template< int bits > 56 class packed_gray_pixel 57 : public packed_pixel< bits > 58 { 59 public: packed_gray_pixel(byte value=0)60 packed_gray_pixel(byte value = 0) 61 : packed_pixel< bits >(value) 62 { 63 } 64 }; 65 66 /** 67 * \brief The 1-bit Grayscale pixel type. 68 */ 69 typedef packed_gray_pixel< 1 > gray_pixel_1; 70 71 /** 72 * \brief The 2-bit Grayscale pixel type. 73 */ 74 typedef packed_gray_pixel< 2 > gray_pixel_2; 75 76 /** 77 * \brief The 4-bit Grayscale pixel type. 78 */ 79 typedef packed_gray_pixel< 4 > gray_pixel_4; 80 81 /** 82 * \brief Pixel traits specialization for gray_pixel. 83 */ 84 template<> 85 struct pixel_traits< gray_pixel > 86 : basic_pixel_traits< gray_pixel, byte, color_type_gray > 87 { 88 }; 89 90 /** 91 * \brief Pixel traits specialization for gray_pixel_16. 92 */ 93 template<> 94 struct pixel_traits< gray_pixel_16 > 95 : basic_pixel_traits< gray_pixel_16, uint_16, color_type_gray > 96 { 97 }; 98 99 /** 100 * \brief Pixel traits specialization for packed_gray_pixel. 101 */ 102 template< int bits > 103 struct pixel_traits< packed_gray_pixel< bits > > 104 : basic_pixel_traits< packed_gray_pixel< bits >, byte, 105 color_type_gray, /* channels = */ 1, bits > 106 { 107 }; 108 109 } // namespace png 110 111 #endif // PNGPP_GRAY_PIXEL_HPP_INCLUDED 112