TuttleOFX
1
|
00001 #ifndef _TERRY_COLOR_PRIMARIES_HPP_ 00002 #define _TERRY_COLOR_PRIMARIES_HPP_ 00003 00004 namespace terry { 00005 namespace color { 00006 00007 /** 00008 * @brief All supported primaries 00009 */ 00010 namespace primaries { 00011 00012 } 00013 00014 //////////////////////////////////////////////////////////////////////////////// 00015 00016 00017 00018 //////////////////////////////////////////////////////////////////////////////// 00019 //////////////////////////////////////////////////////////////////////////////// 00020 00021 #if 0 00022 00023 template< typename Pixel, 00024 class IN, 00025 class OUT > 00026 struct pixel_color_primaries_t 00027 { 00028 typedef typename channel_type<Pixel>::type Channel; 00029 const IN& _in; 00030 const OUT& _out; 00031 00032 pixel_color_primaries_t( const IN& in, const OUT& out ) 00033 : _in(in) 00034 , _out(out) 00035 {} 00036 00037 Pixel& operator()( const Pixel& p1, 00038 Pixel& p2 ) const 00039 { 00040 static_for_each( 00041 p1, p2, 00042 channel_color_primaries_t< Channel, IN, OUT >( _in, _out ) 00043 ); 00044 return p2; 00045 } 00046 }; 00047 00048 template< class IN, 00049 class OUT > 00050 struct transform_pixel_color_primaries_t 00051 { 00052 const IN& _in; 00053 const OUT& _out; 00054 00055 transform_pixel_color_primaries_t( const IN& in, const OUT& out ) 00056 : _in(in) 00057 , _out(out) 00058 {} 00059 00060 template< typename Pixel> 00061 Pixel operator()( const Pixel& p1 ) const 00062 { 00063 Pixel p2; 00064 pixel_color_primaries_t<Pixel, IN, OUT>( _in, _out )( p1, p2 ); 00065 return p2; 00066 } 00067 }; 00068 00069 /** 00070 * @example primaries_convert_view( srcView, dstView, primaries::sRGB(), primaries::Gamma(5.0) ); 00071 */ 00072 template<class PrimariesIN, class PrimariesOUT, class View> 00073 void primaries_convert_view( const View& src, View& dst, const PrimariesIN& primariesIn = PrimariesIN(), const PrimariesOUT& primariesOut = PrimariesOUT() ) 00074 { 00075 boost::gil::transform_pixels( src, dst, transform_pixel_color_primaries_t<PrimariesIN, PrimariesOUT>( primariesIn, primariesOut ) ); 00076 } 00077 00078 /** 00079 * @example primaries_convert_pixel( srcPix, dstPix, primaries::sRGB(), primaries::Gamma(5.0) ); 00080 */ 00081 template<class PrimariesIN, class PrimariesOUT, class Pixel> 00082 void primaries_convert_pixel( const Pixel& src, Pixel& dst, const PrimariesIN& primariesIn = PrimariesIN(), const PrimariesOUT& primariesOut = PrimariesOUT() ) 00083 { 00084 pixel_color_primaries_t<Pixel, PrimariesIN, PrimariesOUT>( primariesIn, primariesOut )( src, dst ); 00085 } 00086 00087 #endif 00088 00089 } 00090 } 00091 00092 #endif 00093