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 );