Namespace color::operation

TOC

Description

Contain miscellaneous function for color processing and manipulation.

List

Name
bias
Description
Calculate bias.
Declaration
 template< typename category_name >
  ::color::model<category_name> & bias( ::color::model<category_name> & result, typename ::color::trait::scalar<category_name>::model_type scalar   );
 
 template< typename category_name >
  ::color::model<category_name> & bias( ::color::model<category_name> &result, ::color::model<category_name> const& right, typename ::color::trait::scalar<category_name>::model_type scalar );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > r{ ::color::constant::lime_t{} }; // result
::color::operation::bias( r, 0.5 );
::color::operation::bias( r, a, 0.5 );

Name
combine
Description
Calculate linear combination of two or tree colors.
For color a and b, and scalars 0.3 and 0.6, result of linear combination is equal to: 0.3*a + 0.6 * b;
For color a, b and c, and scalars 0.4, 0.5 and 0.2, result of linear combination is equal to: 0.4*a + 0.5 * b + 0.2 * b;
Declaration
template< typename category_name >
 ::color::model<category_name> &
 combine
  (
    ::color::model<category_name> & result
   ,typename ::color::trait::scalar<category_name>::model_type a0
   ,::color::model<category_name> const& c0
   ,typename ::color::trait::scalar<category_name>::model_type a1
   ,::color::model<category_name> const& c1
  );

template< typename category_name >
 ::color::model<category_name> &
 combine
  (
    ::color::model<category_name> & result
   ,typename ::color::trait::scalar<category_name>::model_type a0
   ,::color::model<category_name> const& c0
   ,typename ::color::trait::scalar<category_name>::model_type a1
   ,::color::model<category_name> const& c1
   ,typename ::color::trait::scalar<category_name>::model_type a2
   ,::color::model<category_name> const& c2
  );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > b{ ::color::constant::lime_t{} };
::color::rgb< float > c{ ::color::constant::red_t{} };
::color::rgb< float > r; // result
::color::operation::combine( r, 0.1, a, 0.2, b );
::color::operation::combine( r, 0.1, a, 0.2, b, 0.3, b );

Name
median
Description
Calculate median color of two given color for given scalar.
For color a and b, and scalar 0.3 median is result = (1-0.3)a + 0.3 * b;
Declaration
template< typename category_name >
 ::color::model<category_name> & median
 (
   ::color::model<category_name> & result
  ,typename ::color::trait::scalar<category_name>::model_type scalar
  ,color::model<category_name> const&right
 );

template< typename category_name >
 ::color::model<category_name> & median
  (
    ::color::model<category_name> &result
   ,color::model<category_name> const&left
   ,typename ::color::trait::scalar<category_name>::model_type scalar
   ,color::model<category_name> const&right
  );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > b{ ::color::constant::lime_t{} };
::color::rgb< float > r{ ::color::constant::blue_t{} }; // result
::color::operation::median( r, 0.3, b );
::color::operation::median( r, a, 0.25, b );

Name
distance
Description
Calculate distance between two colors.
To specify algorithm use on of next enumerants.
euclid_entity
Observe color as two vectors and calulate euclidian distance between them.
Links:
Wikipedia:< Euclidean distance > .
CIE76_entity
Compare two colors by converting to lab and calculatin euclidian distance.
Links: Wikipedia:< Color difference >
CIE94_graphics_entity
Compare two colors by using CIE94 with textile parameters algorithm.
Links: Wikipedia:< Color difference >, Bruce Lindbloom CIE94
CIE94_textile_entity
Compare two colors by using CIE94 with graphics parameters algorithm.
Links: Wikipedia:< Color difference >, Bruce Lindbloom CIE94
CIEDE2000_entity
Compare two colors by using CIEDE2000 algorithm.
Links: Wikipedia:< Color difference >, Bruce Lindbloom CIE2000
CMC1984_entity
Compare two colors by using CMC1984 algorithm.
Links: Wikipedia:< Color difference >
delta_gray_entity
Calculate delta of two color that convert that delta to gray.
Links: Wikipedia:< Color difference >
Declaration
 template< enum ::color::constant::distance::reference_enum reference_number = ::color::constant::distance::euclid_entity ,typename category_name >
  typename ::color::trait::scalar< category_type >::instance_type distance( ::color::model<category_name> const& left, ::color::model<category_name> const& right );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > b{ ::color::constant::lime_t{} };
::color::operation::distance< ::color::constant::distance::euclid_entity >( a, b );
::color::operation::distance< ::color::constant::distance::CIE76_entity >( a, b );
::color::operation::distance< ::color::constant::distance::CIE94_graphics_entity >( a, b );
::color::operation::distance< ::color::constant::distance::CIE94_textile_entity >( a, b );
::color::operation::distance< ::color::constant::distance::CIEDE2000_entity >( a, b );
::color::operation::distance< ::color::constant::distance::CMC1984_entity >( a, b );

Name
delta
Description
Calculate per coordinate absolute difference between two colors.
Declaration
 template< typename category_name >
  ::color::model<category_name> & result delta( ::color::model<category_name> & result, ::color::model<category_name> const& left, ::color::model<category_name> const& right );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > b{ ::color::constant::lime_t{} };
::color::rgb< float > r;
::color::operation::delta( r, a, b );

Name
gain
Description
Calculate gain.
Declaration
 template< typename category_name >
  ::color::model<category_name> & gain( ::color::model<category_name> & result, typename ::color::trait::scalar<category_name>::model_type scalar );
 
 template< typename category_name >
  ::color::model<category_name> & gain( ::color::model<category_name> &result, ::color::model<category_name> const& right, typename ::color::trait::scalar<category_name>::model_type scalar );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > r{ ::color::constant::lime_t{} }; // result
::color::operation::gain( r, 0.5 );
::color::operation::gain( r, a, 0.5 );

Name
gamma
Description
Calculate gamma corrected color.
Declaration
 template< typename category_name >
  ::color::model<category_name> & gamma( ::color::model<category_name> & result, typename ::color::trait::scalar<category_name>::model_type   );
 
 template< typename category_name >
  ::color::model<category_name> & gamma( ::color::model<category_name> &result, ::color::model<category_name> const& right, typename ::color::trait::scalar<category_name>::model_type scalar );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > r{ ::color::constant::lime_t{} }; // result
::color::operation::gamma( r, 0.5 );
::color::operation::gamma( r, a, 0.5 );

Name
invert
Description
Calculate invert color for given.
Declaration
template< typename category_name >
  ::color::model<category_name> & invert( ::color::model<category_name>& result );
template< typename category_name >
  ::color::model<category_name> & invert( ::color::model<category_name>& result, ::color::model<category_name> const&right );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > b{ ::color::constant::lime_t{} };
a = ::color::operation::invert( b );
::color::operation::invert( a, b );

Name
mix
Description
Blend two color in to new one by respect of alpha channel. Same as blend but return result instead to accept as first parameter.
Declaration
template< unsigned alpha_index, typename category_name >
  ::color::model<category_name> mix( ::color::model<category_name> const& lower, ::color::model<category_name> const& upper );
template< typename category_name >
  ::color::model<category_name> mix( ::color::model<category_name> const& lower, typename ::color::trait::scalar<category_name>::model_type alpha, ::color::model<category_name> const& upper );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > a{ ::color::constant::lime_t{} };
::color::rgb< float > r;
r = color::operation::mix( a, 0.2, b );
Link
Wikipedia Alpha compositing

Name
blend
Description
Blend two color in to new one by respect of alpha channel. Same as mix but accep result as first paramater
Declaration
template< typename category_name >
 ::color::model<category_name> & blend
  (
   ::color::model<category_name> & result
   ,::color::model<category_name> const& upper
  );

template< typename category_name >
 ::color::model<category_name> & blend
  (
   ::color::model<category_name> & result
   ,::color::model<category_name> const& lower
   ,::color::model<category_name> const& upper
  );
template< typename category_name >
 ::color::model<category_name> & blend
  (
   ::color::model<category_name> & result
   ,typename ::color::trait::scalar<category_name>::model_type alpha
   ,::color::model<category_name> const& upper
  );
template< typename category_name >
 ::color::model<category_name> & blend
  (
   ::color::model<category_name> & result
   ,::color::model<category_name> const& lower
   ,typename ::color::trait::scalar<category_name>::model_type alpha
   ,::color::model<category_name> const& upper
  );
Example:
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > b{ ::color::constant::lime_t{} };
:color::operation::blend( a, 0.1, b );
Link
Wikipedia Alpha compositing

Name
addition
Description
Perform addition like they are vectors.
Declaration
template< typename category_name >
  ::color::model<category_name> & addition( color::model<category_name> &result, color::model<category_name> const& right );
template< typename category_name >
  ::color::model<category_name> & addition( color::model<category_name> &result, color::model<category_name> const& left, color::model<category_name> const& right );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > b{ ::color::constant::lime_t{} };
::color::rgb< float > r{ ::color::constant::blue{} };
r = color::operation::addition( a, b );
color::operation::addition( r, a, b );

Name
scale
Description
Scale component by given factor if not stated differently.
Declaration
 template< typename category_name >
  ::color::model<category_name> & scale( ::color::model<category_name> & result, typename ::color::trait::scalar<category_name>::model_type scalar   );
 
 template< typename category_name >
  ::color::model<category_name> & scale( ::color::model<category_name> &result, typename ::color::trait::scalar<category_name>::model_type scalar, ::color::model<category_name> const& right );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > r{ ::color::constant::lime_t{} };
r = color::operation::scale( r, 0.6 );
color::operation::scale( r, 0.6, a );

Name
subtract
Description
Perform subtraction like they are vectors.
Declaration
template< typename category_name >
  ::color::model<category_name> & subtract( color::model<category_name> & result, color::model<category_name> const& right );
template< typename category_name >
  ::color::model<category_name> & subtract( color::model<category_name> & result, color::model<category_name> const& left, color::model<category_name> const& right );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > b{ ::color::constant::lime_t{} };
r = color::operation::subtract( a, b );
::color::operation::subtract( r, a, b );

Name
floor
Description
Perform floor like operation per component.
Declaration
template< typename category_name >
  ::color::model<category_name> & floor( color::model<category_name> & result, color::model<category_name> const& low_bound );
template< typename category_name >
  ::color::model<category_name> & floor( color::model<category_name> & result, color::model<category_name> const& value, color::model<category_name> const& low_bound );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > low_bound{ ::color::constant::lime_t{} }; ::color::rgb< float > r;
::color::operation::floor( r, low_bound );
::color::operation::floor( r, a, low_bound );

Name
ceil
Description
Perform ceil like operation per component.
Declaration
template< typename category_name >
  ::color::model<category_name> & ceil( color::model<category_name> & result, color::model<category_name> const& upper_bound );
template< typename category_name >
  ::color::model<category_name> & ceil( color::model<category_name> & result, color::model<category_name> const& value, color::model<category_name> const& upper_bound );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > upper_bound{ ::color::constant::lime_t{} };
::color::rgb< float > r;
::color::operation::ceil( r, upper_bound );
::color::operation::ceil( r, a, upper_bound );

Name
clip
Description
Perform clip like operation per component.
Declaration
template< typename category_name >
  ::color::model<category_name> & clip( color::model<category_name> & result, color::model<category_name> const& low_bound, color::model<category_name> const& upper_bound );
template< typename category_name >
  ::color::model<category_name> & clip( color::model<category_name> & result,color::model<category_name> const & value, color::model<category_name> const& low_bound, color::model<category_name> const& upper_bound );
Example
::color::rgb< float > a{ ::color::constant::orange_t{} };
::color::rgb< float > upper_bound{ ::color::constant::lime_t{} };
::color::rgb< float > low_bound{ ::color::constant::chocolate_t{} };
::color::rgb< float > r;
::color::operation::clip( r, low_bound, upper_bound );
::color::operation::clip( r, a, low_bound, upper_bound );