TuttleOFX  1
primaries.hpp
Go to the documentation of this file.
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