Struct cosmic::cosmic_theme::palette::cam16::Parameters
source · #[non_exhaustive]pub struct Parameters<WpParam, T> {
pub white_point: WpParam,
pub adapting_luminance: T,
pub background_luminance: T,
pub surround: Surround<T>,
pub discounting: Discounting<T>,
}
Expand description
Parameters for CAM16 that describe the viewing conditions.
These parameters describe the viewing conditions for a more accurate color
appearance metric. The CAM16 attributes and derived values are only really
comparable if they were calculated with the same parameters. The parameters
are, however, too dynamic to all be part of the type parameters of
Cam16
.
The default values are mostly a “blank slate”, with a couple of educated guesses. Be sure to at least customize the luminances according to the expected environment:
use palette::{Srgb, Xyz, IntoColor, cam16::{Parameters, Surround, Cam16}};
// 40 nits, 50% background luminance and a dim surrounding:
let mut example_parameters = Parameters::default_static_wp(40.0);
example_parameters.background_luminance = 0.5;
example_parameters.surround = Surround::Dim;
let example_color_xyz = Srgb::from(0x5588cc).into_linear().into_color();
let cam16: Cam16<f64> = Cam16::from_xyz(example_color_xyz, example_parameters);
See also Moroney (2000) Usage Guidelines for CIECAM97s for more information and advice on how to customize these parameters.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. }
syntax; cannot be matched against without a wildcard ..
; and struct update syntax will not work.white_point: WpParam
White point of the test illuminant, Xw Yw Zw. Yw should be normalized to 1.0.
Defaults to Wp
when it implements WhitePoint
. It can also be set
to a custom value if Wp
results in the wrong white point.
adapting_luminance: T
The average luminance of the environment (test adapting field) (LA) in cd/m2 (nits).
Under a “gray world” assumption this is 20% of the luminance of the reference white.
background_luminance: T
The luminance factor of the background (Yb), on a scale
from 0.0
to 1.0
(relative to Yw = 1.0).
Defaults to 0.2
, medium grey.
surround: Surround<T>
A description of the peripheral area, with a value from 0% to 20%. Any value outside that range will be clamped to 0% or 20%. It has presets for “dark”, “dim” and “average”.
Defaults to “average” (20%).
discounting: Discounting<T>
The degree of discounting of (or adaptation to) the reference
illuminant. Defaults to Auto
, making the degree of discounting depend
on the other parameters, but can be customized if necessary.
Implementations§
source§impl<Wp, T> Parameters<StaticWp<Wp>, T>
impl<Wp, T> Parameters<StaticWp<Wp>, T>
sourcepub fn default_static_wp(adapting_luminance: T) -> Parameters<StaticWp<Wp>, T>where
T: Real,
pub fn default_static_wp(adapting_luminance: T) -> Parameters<StaticWp<Wp>, T>where
T: Real,
Creates a new set of parameters with a static white point and their default values set.
These parameters may need to be further customized according to the viewing conditions.
source§impl<T> Parameters<Xyz<Any, T>, T>
impl<T> Parameters<Xyz<Any, T>, T>
sourcepub fn default_dynamic_wp(
white_point: Xyz<Any, T>,
adapting_luminance: T,
) -> Parameters<Xyz<Any, T>, T>where
T: Real,
pub fn default_dynamic_wp(
white_point: Xyz<Any, T>,
adapting_luminance: T,
) -> Parameters<Xyz<Any, T>, T>where
T: Real,
Creates a new set of parameters with a dynamic white point and their default values set.
These parameters may need to be further customized according to the viewing conditions.
source§impl<WpParam, T> Parameters<WpParam, T>
impl<WpParam, T> Parameters<WpParam, T>
sourcepub fn bake(self) -> BakedParameters<WpParam, T>
pub fn bake(self) -> BakedParameters<WpParam, T>
Pre-bakes the parameters to avoid repeating parts of the calculaitons when converting to and from CAM16.
Trait Implementations§
source§impl<WpParam, T> Clone for Parameters<WpParam, T>
impl<WpParam, T> Clone for Parameters<WpParam, T>
source§fn clone(&self) -> Parameters<WpParam, T>
fn clone(&self) -> Parameters<WpParam, T>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<WpParam, T> From<Parameters<WpParam, T>> for BakedParameters<WpParam, T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar<Scalar = T> + One + Zero + Clamp + PartialCmp + Arithmetics + Powf + Sqrt + Exp + Abs + Signum + Clone,
<T as HasBoolMask>::Mask: LazySelect<T>,
impl<WpParam, T> From<Parameters<WpParam, T>> for BakedParameters<WpParam, T>where
WpParam: WhitePointParameter<T>,
T: Real + FromScalar<Scalar = T> + One + Zero + Clamp + PartialCmp + Arithmetics + Powf + Sqrt + Exp + Abs + Signum + Clone,
<T as HasBoolMask>::Mask: LazySelect<T>,
source§fn from(value: Parameters<WpParam, T>) -> BakedParameters<WpParam, T>
fn from(value: Parameters<WpParam, T>) -> BakedParameters<WpParam, T>
impl<WpParam, T> Copy for Parameters<WpParam, T>
Auto Trait Implementations§
impl<WpParam, T> Freeze for Parameters<WpParam, T>
impl<WpParam, T> RefUnwindSafe for Parameters<WpParam, T>where
WpParam: RefUnwindSafe,
T: RefUnwindSafe,
impl<WpParam, T> Send for Parameters<WpParam, T>
impl<WpParam, T> Sync for Parameters<WpParam, T>
impl<WpParam, T> Unpin for Parameters<WpParam, T>
impl<WpParam, T> UnwindSafe for Parameters<WpParam, T>where
WpParam: UnwindSafe,
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, Res> Apply<Res> for Twhere
T: ?Sized,
impl<T, Res> Apply<Res> for Twhere
T: ?Sized,
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for 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> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§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> Pointable for T
impl<T> Pointable for T
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