1 #ifndef color_rgb_get_inphase 2 #define color_rgb_get_inphase 3 4 // ::color::get::inphase( c ) 5 6 #include "../../yiq/akin/rgb.hpp" 7 #include "../../yiq/trait/component.hpp" 8 #include "../../yiq/constant.hpp" 9 #include "../../yiq/place/place.hpp" 10 11 #include "../category.hpp" 12 13 #include "../../_internal/normalize.hpp" 14 #include "../../_internal/diverse.hpp" 15 #include "../../generic/trait/scalar.hpp" 16 #include "../../generic/get/inphase.hpp" 17 18 19 namespace color 20 { 21 namespace get 22 { 23 24 template< typename tag_name > 25 inline 26 typename ::color::model< typename ::color::akin::yiq< ::color::category::rgb<tag_name> >::akin_type >::component_const_type inphase(::color::model<::color::category::rgb<tag_name>> const & color_parameter)27 inphase( ::color::model< ::color::category::rgb<tag_name> > const& color_parameter ) 28 { 29 typedef ::color::category::rgb<tag_name> category_type; 30 typedef typename ::color::trait::scalar<category_type>::instance_type scalar_type; 31 32 typedef typename ::color::akin::yiq<category_type>::akin_type akin_type; 33 34 typedef ::color::_internal::diverse< akin_type > diverse_type; 35 typedef ::color::_internal::normalize< category_type > normalize_type; 36 37 typedef ::color::constant::yiq< akin_type > yiq_const_type; 38 39 enum 40 { 41 inphase_p = ::color::place::_internal::inphase<akin_type>::position_enum 42 }; 43 44 enum 45 { 46 red_p = ::color::place::_internal::red<category_type>::position_enum 47 ,green_p = ::color::place::_internal::green<category_type>::position_enum 48 ,blue_p = ::color::place::_internal::blue<category_type>::position_enum 49 }; 50 51 scalar_type value = 52 + yiq_const_type::b21() * normalize_type::template process<red_p >( color_parameter.template get<red_p >() ) 53 + yiq_const_type::b22() * normalize_type::template process<green_p >( color_parameter.template get<green_p >() ) 54 + yiq_const_type::b23() * normalize_type::template process<blue_p >( color_parameter.template get<blue_p >() ) 55 ; 56 57 value = value / yiq_const_type::i_range() + scalar_type(0.5); 58 return diverse_type::template process<inphase_p>( /*typename ::color::trait::scalar<akin_type>::instance_type ( */value /* ) */); 59 } 60 61 } 62 } 63 64 #endif