Struct XyzD65
pub struct XyzD65;Expand description
๐ The CIE XYZ color space with a 2ยฐ observer and a reference white of D65.
Its components are [X, Y, Z]. The components are unbounded, but are usually positive.
Reference white has a luminance Y of 1.
This corresponds to the color space in CSS Color Module Level 4 ยง 10.8. It is defined in CIE 015:2018. Following CSS Color Module Level 4 ยง 11, the conversion between D50 and D65 white points is done with the standard Bradford linear chromatic adaptation transform.
ยงHuman color vision and color spaces
Human color vision uses three types of photoreceptive cell in the eye that are sensitive to light. These cells have their peak sensitivity at different wavelengths of light: roughly 570 nm, 535 nm and 430 nm, usually named Long, Medium and Short (LMS) respectively. The cellsโ sensitivities to light taper off as the wavelength moves away from their peaks, but all three cells overlap in wavelength sensitivity.
Visible light with a combination of wavelengths at specific intensities (the lightโs spectral density), causes excitation of these three cell types in varying amounts. The human brain interprets this as a specific color at a certain luminosity. Importantly, humans do not directly perceive the lightโs wavelength: for example, monochromatic light with a wavelength of 580 nm is perceived as โyellow,โ and light made up of two wavelengths at roughly 550nm (โgreenโ) and 610 nm (โredโ) is also perceived as โyellow.โ
The CIE XYZ color space is an experimentally-obtained mapping of monochromatic light at a specific wavelength to the response of human L, M and S photoreceptive cells (with some additional mathematically desirable properties). Light of a specific spectral density maps onto a specific coordinate in the XYZ color space. Light of a different spectral density that maps onto the same XYZ coordinate is predicted by the color space to be perceived as the same color and luminosity.
The XYZ color space is often used in the characterization of other color spaces.
ยงWhite point
An important concept in color spaces is the white point. Whereas pure black is the absence of illumination and has a natural representation in additive color spaces, white is more difficult to define. CIE D65 defines white as the perceived color of diffuse standard noon daylight perfectly reflected off a surface observed under some foveal angle; here 2ยฐ.
In many color spaces, their white point is the brightest illumination they can naturally represent.
For further reading, the Wikipedia article on the CIE XYZ color space provides a good introduction to color theory as relevant to color spaces.
Trait Implementationsยง
ยงimpl ColorSpace for XyzD65
impl ColorSpace for XyzD65
ยงconst TAG: Option<ColorSpaceTag>
const TAG: Option<ColorSpaceTag>
ยงconst WHITE_COMPONENTS: [f32; 3]
const WHITE_COMPONENTS: [f32; 3]
ยงfn clip(_: [f32; 3]) -> [f32; 3]
fn clip(_: [f32; 3]) -> [f32; 3]
ยงconst LAYOUT: ColorSpaceLayout = ColorSpaceLayout::Rectangular
const LAYOUT: ColorSpaceLayout = ColorSpaceLayout::Rectangular
ยงconst WHITE_POINT: Chromaticity = Chromaticity::D65
const WHITE_POINT: Chromaticity = Chromaticity::D65
ยงfn convert<TargetCS>(src: [f32; 3]) -> [f32; 3]where
TargetCS: ColorSpace,
fn convert<TargetCS>(src: [f32; 3]) -> [f32; 3]where
TargetCS: ColorSpace,
ยงfn to_linear_srgb_absolute(src: [f32; 3]) -> [f32; 3]
fn to_linear_srgb_absolute(src: [f32; 3]) -> [f32; 3]
ยงfn from_linear_srgb_absolute(src: [f32; 3]) -> [f32; 3]
fn from_linear_srgb_absolute(src: [f32; 3]) -> [f32; 3]
ยงfn convert_absolute<TargetCS>(src: [f32; 3]) -> [f32; 3]where
TargetCS: ColorSpace,
fn convert_absolute<TargetCS>(src: [f32; 3]) -> [f32; 3]where
TargetCS: ColorSpace,
ยงfn chromatically_adapt(
src: [f32; 3],
from: Chromaticity,
to: Chromaticity,
) -> [f32; 3]
fn chromatically_adapt( src: [f32; 3], from: Chromaticity, to: Chromaticity, ) -> [f32; 3]
ยงimpl From<XyzD65> for ColorSpaceTag
impl From<XyzD65> for ColorSpaceTag
ยงfn from(_: XyzD65) -> ColorSpaceTag
fn from(_: XyzD65) -> ColorSpaceTag
impl Copy for XyzD65
Auto Trait Implementationsยง
impl Freeze for XyzD65
impl RefUnwindSafe for XyzD65
impl Send for XyzD65
impl Sync for XyzD65
impl Unpin for XyzD65
impl UnwindSafe for XyzD65
Blanket Implementationsยง
ยงimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
ยงfn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
ยงimpl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
ยงunsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)ยงimpl<T> Instrument for T
impl<T> Instrument for T
ยงfn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
ยงfn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 more