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