#[repr(C)]pub struct Cam16<T> {
pub lightness: T,
pub chroma: T,
pub hue: Cam16Hue<T>,
pub brightness: T,
pub colorfulness: T,
pub saturation: T,
}
Expand description
The CIE CAM16 color appearance model.
It’s a set of six technically defined attributes that describe the
appearance of a color under certain viewing conditions, and it’s a successor
of CIECAM02. The viewing
conditions are defined using Parameters
, and two sets
of parameters can be used to translate the appearance of a color from one
set of viewing conditions to another.
The use of the viewing conditions parameters sets Cam16
and its derived
types apart from most other color types in this library. It’s, for example,
not possible to use FromColor
and friends to convert
to and from other types, since that would require default viewing conditions
to exist. Instead, the explicit Cam16::from_xyz
and Cam16::into_xyz
are there to bridge the gap.
Not all attributes are used when converting from CAM16, since they are correlated and derived from each other. This library also provides partial versions of this struct, to make it easier to correctly specify a minimum attribute set.
The full list of partial CAM16 variants is:
Cam16Jch
: lightness and chroma.Cam16Jmh
: lightness and colorfulness.Cam16Jsh
: lightness and saturation.Cam16Qch
: brightness and chroma.Cam16Qmh
: brightness and colorfulness.Cam16Qsh
: brightness and saturation.
§CAM16-UCS
While CIE CAM16 is a model of color appearance, it’s not necessarily
suitable as a color space. Instead, there is the CAM16-UCS (CAM16 uniform
color space), that’s based off of the lightness, colorfulness and hue
attributes. This colorspace is represented by the
Cam16UcsJmh
and
Cam16UcsJab
types.
§Creating a Value
A Cam16
value would typically come from another color space, or one of the
partial sets of CAM16 attributes. All of which require known viewing
conditions.
use palette::{
Srgb, FromColor, IntoColor,
cam16::{Cam16, Parameters, Cam16Jmh, Cam16UcsJmh},
};
// Customize these according to the viewing conditions:
let mut example_parameters = Parameters::default_static_wp(40.0);
// CAM16 from sRGB, or most other color spaces:
let rgb = Srgb::new(0.3f32, 0.8, 0.1);
let cam16_from_rgb = Cam16::from_xyz(rgb.into_color(), example_parameters);
// Full CAM16 from a partial set (any partial set can be used):
let partial = Cam16Jmh::new(50.0f32, 80.0, 120.0);
let cam16_from_partial = partial.into_full(example_parameters);
// Full CAM16 from CAM16-UCS J'M'h':
let ucs = Cam16UcsJmh::new(50.0f32, 80.0, 120.0);
let cam16_from_ucs = Cam16Jmh::from_color(ucs).into_full(example_parameters);
Fields§
§lightness: T
The lightness (J) of the color.
It’s a perception of the color’s luminance, but not linear to it, and is
relative to the reference white. The lightness of black is 0.0
and the
lightness of white is 100.0
.
Lightness behaves similarly to L* in Lch
or lightness
in Hsl
.
See also https://en.wikipedia.org/wiki/Lightness.
chroma: T
The chroma (C) of the color.
It’s how chromatic the color appears in comparison with a grey color of the same lightness. Changing the perceived chroma doesn’t change the perceived lightness, and vice versa.
Chroma behaves similarly to chroma in Lch
or saturation
in Hsl
.
hue: Cam16Hue<T>
The hue (h) of the color.
The color’s position around a color circle, in degrees.
See also https://en.wikipedia.org/wiki/Hue.
brightness: T
The brightness (Q) of the color.
It’s the perception of how much light appears to shine from an object.
As opposed to lightness
, this is not in comparison to a reference
white, but in more absolute terms. Lightness and brightness area also
not linearly correlated in CAM16.
Brightness behaves similarly to value in Hsv
.
See also https://en.wikipedia.org/wiki/Brightness.
colorfulness: T
The colorfulness (M) of the color.
It’s a perception of how chromatic the color is and usually increases with luminance, unless the brightness is very high.
saturation: T
The saturation (s) of the color.
It’s the colorfulness of a color in proportion to its own brightness. The perceived saturation should stay the same when the perceived brightness changes, and vice versa.
Saturation behaves similarly to saturation in Hsv
.
See also https://en.wikipedia.org/wiki/Colorfulness#Saturation.
Implementations§
source§impl<T> Cam16<T>
impl<T> Cam16<T>
sourcepub fn from_xyz<WpParam>(
color: Xyz<WpParam::StaticWp, T>,
parameters: impl Into<BakedParameters<WpParam, T::Scalar>>,
) -> Selfwhere
Xyz<WpParam::StaticWp, T>: IntoCam16Unclamped<WpParam, Self, Scalar = T::Scalar>,
T: FromScalar,
WpParam: WhitePointParameter<T::Scalar>,
pub fn from_xyz<WpParam>(
color: Xyz<WpParam::StaticWp, T>,
parameters: impl Into<BakedParameters<WpParam, T::Scalar>>,
) -> Selfwhere
Xyz<WpParam::StaticWp, T>: IntoCam16Unclamped<WpParam, Self, Scalar = T::Scalar>,
T: FromScalar,
WpParam: WhitePointParameter<T::Scalar>,
Derive CIE CAM16 attributes for the provided color, under the provided viewing conditions.
use palette::{Srgb, IntoColor, cam16::{Cam16, Parameters}};
// Customize these according to the viewing conditions:
let mut example_parameters = Parameters::default_static_wp(40.0);
let rgb = Srgb::new(0.3f32, 0.8, 0.1);
let cam16 = Cam16::from_xyz(rgb.into_color(), example_parameters);
It’s also possible to “pre-bake” the parameters, to avoid recalculate some of the derived values when converting multiple color value.
use palette::{Srgb, IntoColor, cam16::{Cam16, Parameters}};
// Customize these according to the viewing conditions:
let mut example_parameters = Parameters::default_static_wp(40.0);
let baked_parameters = example_parameters.bake();
let rgb = Srgb::new(0.3f32, 0.8, 0.1);
let cam16 = Cam16::from_xyz(rgb.into_color(), baked_parameters);
sourcepub fn into_xyz<WpParam>(
self,
parameters: impl Into<BakedParameters<WpParam, T::Scalar>>,
) -> Xyz<WpParam::StaticWp, T>where
Self: Cam16IntoUnclamped<WpParam, Xyz<WpParam::StaticWp, T>, Scalar = T::Scalar>,
WpParam: WhitePointParameter<T>,
T: FromScalar,
pub fn into_xyz<WpParam>(
self,
parameters: impl Into<BakedParameters<WpParam, T::Scalar>>,
) -> Xyz<WpParam::StaticWp, T>where
Self: Cam16IntoUnclamped<WpParam, Xyz<WpParam::StaticWp, T>, Scalar = T::Scalar>,
WpParam: WhitePointParameter<T>,
T: FromScalar,
Construct an XYZ color that matches these CIE CAM16 attributes, under the provided viewing conditions.
This assumes that all of the correlated attributes are consistent, as only some of them are actually used. You may want to use one of the partial CAM16 representations for more control over which set of attributes that should be.
use palette::{Srgb, FromColor, cam16::{Cam16, Parameters}};
// Customize these according to the viewing conditions:
let mut example_parameters = Parameters::default_static_wp(40.0);
let cam16: Cam16<f32> = get_cam16_value();
let rgb = Srgb::from_color(cam16.into_xyz(example_parameters));
It’s also possible to “pre-bake” the parameters, to avoid recalculate some of the derived values when converting multiple color value.
use palette::{Srgb, FromColor, cam16::{Cam16, Parameters}};
// Customize these according to the viewing conditions:
let mut example_parameters = Parameters::default_static_wp(40.0);
let baked_parameters = example_parameters.bake();
let cam16: Cam16<f32> = get_cam16_value();
let rgb = Srgb::from_color(cam16.into_xyz(baked_parameters));
Trait Implementations§
source§impl<T> AbsDiffEq for Cam16<T>
impl<T> AbsDiffEq for Cam16<T>
source§fn default_epsilon() -> Self::Epsilon
fn default_epsilon() -> Self::Epsilon
source§fn abs_diff_eq(&self, other: &Self, epsilon: T::Epsilon) -> bool
fn abs_diff_eq(&self, other: &Self, epsilon: T::Epsilon) -> bool
source§fn abs_diff_ne(&self, other: &Self, epsilon: T::Epsilon) -> bool
fn abs_diff_ne(&self, other: &Self, epsilon: T::Epsilon) -> bool
AbsDiffEq::abs_diff_eq
.source§impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Jch<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Jch<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
source§type Scalar = <T as FromScalar>::Scalar
type Scalar = <T as FromScalar>::Scalar
parameters
when converting.source§fn cam16_from_unclamped(
cam16: Cam16Jch<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn cam16_from_unclamped( cam16: Cam16Jch<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
color
into Self
, using the provided parameters.source§impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Jmh<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Jmh<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
source§type Scalar = <T as FromScalar>::Scalar
type Scalar = <T as FromScalar>::Scalar
parameters
when converting.source§fn cam16_from_unclamped(
cam16: Cam16Jmh<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn cam16_from_unclamped( cam16: Cam16Jmh<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
color
into Self
, using the provided parameters.source§impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Jsh<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Jsh<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
source§type Scalar = <T as FromScalar>::Scalar
type Scalar = <T as FromScalar>::Scalar
parameters
when converting.source§fn cam16_from_unclamped(
cam16: Cam16Jsh<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn cam16_from_unclamped( cam16: Cam16Jsh<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
color
into Self
, using the provided parameters.source§impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Qch<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Qch<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
source§type Scalar = <T as FromScalar>::Scalar
type Scalar = <T as FromScalar>::Scalar
parameters
when converting.source§fn cam16_from_unclamped(
cam16: Cam16Qch<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn cam16_from_unclamped( cam16: Cam16Qch<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
color
into Self
, using the provided parameters.source§impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Qmh<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Qmh<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
source§type Scalar = <T as FromScalar>::Scalar
type Scalar = <T as FromScalar>::Scalar
parameters
when converting.source§fn cam16_from_unclamped(
cam16: Cam16Qmh<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn cam16_from_unclamped( cam16: Cam16Qmh<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
color
into Self
, using the provided parameters.source§impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Qsh<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
impl<WpParam, T> Cam16FromUnclamped<WpParam, Cam16Qsh<T>> for Cam16<T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar + Zero + Arithmetics + Sqrt + PartialCmp + Clone,
T::Mask: LazySelect<T> + Clone,
T::Scalar: Clone,
source§type Scalar = <T as FromScalar>::Scalar
type Scalar = <T as FromScalar>::Scalar
parameters
when converting.source§fn cam16_from_unclamped(
cam16: Cam16Qsh<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn cam16_from_unclamped( cam16: Cam16Qsh<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
color
into Self
, using the provided parameters.source§impl<WpParam, T> Cam16FromUnclamped<WpParam, Xyz<<WpParam as WhitePointParameter<<T as FromScalar>::Scalar>>::StaticWp, T>> for Cam16<T>where
WpParam: WhitePointParameter<T::Scalar>,
T: Real + FromScalar + Arithmetics + Powf + Sqrt + Abs + Signum + Trigonometry + RealAngle + Clone,
T::Scalar: Clone,
impl<WpParam, T> Cam16FromUnclamped<WpParam, Xyz<<WpParam as WhitePointParameter<<T as FromScalar>::Scalar>>::StaticWp, T>> for Cam16<T>where
WpParam: WhitePointParameter<T::Scalar>,
T: Real + FromScalar + Arithmetics + Powf + Sqrt + Abs + Signum + Trigonometry + RealAngle + Clone,
T::Scalar: Clone,
source§type Scalar = <T as FromScalar>::Scalar
type Scalar = <T as FromScalar>::Scalar
parameters
when converting.source§fn cam16_from_unclamped(
color: Xyz<WpParam::StaticWp, T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn cam16_from_unclamped( color: Xyz<WpParam::StaticWp, T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
color
into Self
, using the provided parameters.source§impl<T> ClampAssign for Cam16<T>where
T: ClampAssign + Zero,
impl<T> ClampAssign for Cam16<T>where
T: ClampAssign + Zero,
source§fn clamp_assign(&mut self)
fn clamp_assign(&mut self)
source§impl<T, V, const N: usize> From<Cam16<V>> for [Cam16<T>; N]where
Self: Default,
V: IntoScalarArray<N, Scalar = T>,
impl<T, V, const N: usize> From<Cam16<V>> for [Cam16<T>; N]where
Self: Default,
V: IntoScalarArray<N, Scalar = T>,
source§impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16<T>> for Xyz<WpParam::StaticWp, T>where
WpParam: WhitePointParameter<T>,
T: FromScalar,
Cam16Jch<T>: Cam16IntoUnclamped<WpParam, Self, Scalar = T::Scalar>,
impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16<T>> for Xyz<WpParam::StaticWp, T>where
WpParam: WhitePointParameter<T>,
T: FromScalar,
Cam16Jch<T>: Cam16IntoUnclamped<WpParam, Self, Scalar = T::Scalar>,
source§type Scalar = <T as FromScalar>::Scalar
type Scalar = <T as FromScalar>::Scalar
parameters
when converting.source§fn from_cam16_unclamped(
cam16: Cam16<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn from_cam16_unclamped( cam16: Cam16<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
cam16
into Self
, using the provided parameters.source§impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Jch<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Jch<T>>,
impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Jch<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Jch<T>>,
source§type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Jch<T>>>::Scalar
type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Jch<T>>>::Scalar
parameters
when converting.source§fn from_cam16_unclamped(
cam16: Cam16Jch<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn from_cam16_unclamped( cam16: Cam16Jch<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
cam16
into Self
, using the provided parameters.source§impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Jmh<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Jmh<T>>,
impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Jmh<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Jmh<T>>,
source§type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Jmh<T>>>::Scalar
type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Jmh<T>>>::Scalar
parameters
when converting.source§fn from_cam16_unclamped(
cam16: Cam16Jmh<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn from_cam16_unclamped( cam16: Cam16Jmh<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
cam16
into Self
, using the provided parameters.source§impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Jsh<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Jsh<T>>,
impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Jsh<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Jsh<T>>,
source§type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Jsh<T>>>::Scalar
type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Jsh<T>>>::Scalar
parameters
when converting.source§fn from_cam16_unclamped(
cam16: Cam16Jsh<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn from_cam16_unclamped( cam16: Cam16Jsh<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
cam16
into Self
, using the provided parameters.source§impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Qch<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Qch<T>>,
impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Qch<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Qch<T>>,
source§type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Qch<T>>>::Scalar
type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Qch<T>>>::Scalar
parameters
when converting.source§fn from_cam16_unclamped(
cam16: Cam16Qch<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn from_cam16_unclamped( cam16: Cam16Qch<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
cam16
into Self
, using the provided parameters.source§impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Qmh<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Qmh<T>>,
impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Qmh<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Qmh<T>>,
source§type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Qmh<T>>>::Scalar
type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Qmh<T>>>::Scalar
parameters
when converting.source§fn from_cam16_unclamped(
cam16: Cam16Qmh<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn from_cam16_unclamped( cam16: Cam16Qmh<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
cam16
into Self
, using the provided parameters.source§impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Qsh<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Qsh<T>>,
impl<WpParam, T> FromCam16Unclamped<WpParam, Cam16Qsh<T>> for Cam16<T>where
Self: Cam16FromUnclamped<WpParam, Cam16Qsh<T>>,
source§type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Qsh<T>>>::Scalar
type Scalar = <Cam16<T> as Cam16FromUnclamped<WpParam, Cam16Qsh<T>>>::Scalar
parameters
when converting.source§fn from_cam16_unclamped(
cam16: Cam16Qsh<T>,
parameters: BakedParameters<WpParam, Self::Scalar>,
) -> Self
fn from_cam16_unclamped( cam16: Cam16Qsh<T>, parameters: BakedParameters<WpParam, Self::Scalar>, ) -> Self
cam16
into Self
, using the provided parameters.source§impl<T> FromColorUnclamped<Cam16<T>> for Cam16Jch<T>
impl<T> FromColorUnclamped<Cam16<T>> for Cam16Jch<T>
source§fn from_color_unclamped(val: Cam16<T>) -> Self
fn from_color_unclamped(val: Cam16<T>) -> Self
source§impl<T> FromColorUnclamped<Cam16<T>> for Cam16Jmh<T>
impl<T> FromColorUnclamped<Cam16<T>> for Cam16Jmh<T>
source§fn from_color_unclamped(val: Cam16<T>) -> Self
fn from_color_unclamped(val: Cam16<T>) -> Self
source§impl<T> FromColorUnclamped<Cam16<T>> for Cam16Jsh<T>
impl<T> FromColorUnclamped<Cam16<T>> for Cam16Jsh<T>
source§fn from_color_unclamped(val: Cam16<T>) -> Self
fn from_color_unclamped(val: Cam16<T>) -> Self
source§impl<T> FromColorUnclamped<Cam16<T>> for Cam16Qch<T>
impl<T> FromColorUnclamped<Cam16<T>> for Cam16Qch<T>
source§fn from_color_unclamped(val: Cam16<T>) -> Self
fn from_color_unclamped(val: Cam16<T>) -> Self
source§impl<T> FromColorUnclamped<Cam16<T>> for Cam16Qmh<T>
impl<T> FromColorUnclamped<Cam16<T>> for Cam16Qmh<T>
source§fn from_color_unclamped(val: Cam16<T>) -> Self
fn from_color_unclamped(val: Cam16<T>) -> Self
source§impl<T> FromColorUnclamped<Cam16<T>> for Cam16Qsh<T>
impl<T> FromColorUnclamped<Cam16<T>> for Cam16Qsh<T>
source§fn from_color_unclamped(val: Cam16<T>) -> Self
fn from_color_unclamped(val: Cam16<T>) -> Self
source§impl<T> FromColorUnclamped<Cam16<T>> for Cam16UcsJab<T>
impl<T> FromColorUnclamped<Cam16<T>> for Cam16UcsJab<T>
source§fn from_color_unclamped(color: Cam16<T>) -> Self
fn from_color_unclamped(color: Cam16<T>) -> Self
source§impl<T> FromColorUnclamped<Cam16<T>> for Cam16UcsJmh<T>
impl<T> FromColorUnclamped<Cam16<T>> for Cam16UcsJmh<T>
source§fn from_color_unclamped(color: Cam16<T>) -> Self
fn from_color_unclamped(color: Cam16<T>) -> Self
source§impl<T> HasBoolMask for Cam16<T>where
T: HasBoolMask,
impl<T> HasBoolMask for Cam16<T>where
T: HasBoolMask,
source§type Mask = <T as HasBoolMask>::Mask
type Mask = <T as HasBoolMask>::Mask
Self
values.source§impl<T> IsWithinBounds for Cam16<T>
impl<T> IsWithinBounds for Cam16<T>
source§fn is_within_bounds(&self) -> T::Mask
fn is_within_bounds(&self) -> T::Mask
source§impl<T> RelativeEq for Cam16<T>
impl<T> RelativeEq for Cam16<T>
source§fn default_max_relative() -> T::Epsilon
fn default_max_relative() -> T::Epsilon
source§fn relative_eq(
&self,
other: &Self,
epsilon: T::Epsilon,
max_relative: T::Epsilon,
) -> bool
fn relative_eq( &self, other: &Self, epsilon: T::Epsilon, max_relative: T::Epsilon, ) -> bool
source§fn relative_ne(
&self,
other: &Self,
epsilon: T::Epsilon,
max_relative: T::Epsilon,
) -> bool
fn relative_ne( &self, other: &Self, epsilon: T::Epsilon, max_relative: T::Epsilon, ) -> bool
RelativeEq::relative_eq
.source§impl<T> UlpsEq for Cam16<T>
impl<T> UlpsEq for Cam16<T>
source§impl<T, _A> WithAlpha<_A> for Cam16<T>where
_A: Stimulus,
impl<T, _A> WithAlpha<_A> for Cam16<T>where
_A: Stimulus,
source§fn with_alpha(self, alpha: _A) -> Self::WithAlpha
fn with_alpha(self, alpha: _A) -> Self::WithAlpha
Self
already has a transparency, it is
overwritten. Read moresource§fn without_alpha(self) -> Self::Color
fn without_alpha(self) -> Self::Color
Self::Color
has
an internal transparency field, that field will be set to
A::max_intensity()
to make it opaque. Read moresource§fn split(self) -> (Self::Color, _A)
fn split(self) -> (Self::Color, _A)
impl<T: Copy> Copy for Cam16<T>
impl<T> Eq for Cam16<T>
Auto Trait Implementations§
impl<T> Freeze for Cam16<T>where
T: Freeze,
impl<T> RefUnwindSafe for Cam16<T>where
T: RefUnwindSafe,
impl<T> Send for Cam16<T>where
T: Send,
impl<T> Sync for Cam16<T>where
T: Sync,
impl<T> Unpin for Cam16<T>where
T: Unpin,
impl<T> UnwindSafe for Cam16<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters
when converting.source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle
.source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other
into Self
, while performing the appropriate scaling,
rounding and clamping.source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
source§fn into_angle(self) -> U
fn into_angle(self) -> U
T
.source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters
when converting.source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
source§fn into_color(self) -> U
fn into_color(self) -> U
source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
source§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self
into T
, while performing the appropriate scaling,
rounding and clamping.source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors
fails to cast.source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read more