Struct XyzD65

Source
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§

Source§

impl Clone for XyzD65

Source§

fn clone(&self) -> XyzD65

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl ColorSpace for XyzD65

Source§

const IS_LINEAR: bool = true

Whether the color space is linear. Read more
Source§

const TAG: Option<ColorSpaceTag>

The tag corresponding to this color space, if a matching tag exists.
Source§

const WHITE_COMPONENTS: [f32; 3]

The component values for the color white within this color space.
Source§

fn to_linear_srgb(src: [f32; 3]) -> [f32; 3]

Convert an opaque color to linear sRGB. Read more
Source§

fn from_linear_srgb(src: [f32; 3]) -> [f32; 3]

Convert an opaque color from linear sRGB. Read more
Source§

fn clip([x, y, z]: [f32; 3]) -> [f32; 3]

Clip the color’s components to fit within the natural gamut of the color space. Read more
Source§

const LAYOUT: ColorSpaceLayout = ColorSpaceLayout::Rectangular

The layout of the color space. Read more
Source§

const WHITE_POINT: Chromaticity = Chromaticity::D65

The white point of the color space. Read more
Source§

fn convert<TargetCS: ColorSpace>(src: [f32; 3]) -> [f32; 3]

Convert to a different color space. Read more
Source§

fn to_linear_srgb_absolute(src: [f32; 3]) -> [f32; 3]

Convert an opaque color to linear sRGB, without chromatic adaptation. Read more
Source§

fn from_linear_srgb_absolute(src: [f32; 3]) -> [f32; 3]

Convert an opaque color from linear sRGB, without chromatic adaptation. Read more
Source§

fn convert_absolute<TargetCS: ColorSpace>(src: [f32; 3]) -> [f32; 3]

Convert to a different color space, without chromatic adaptation. Read more
Source§

fn chromatically_adapt( src: [f32; 3], from: Chromaticity, to: Chromaticity, ) -> [f32; 3]

Chromatically adapt the color between the given white point chromaticities. Read more
Source§

fn scale_chroma(src: [f32; 3], scale: f32) -> [f32; 3]

Scale the chroma by the given amount. Read more
Source§

impl Debug for XyzD65

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<XyzD65> for ColorSpaceTag

Source§

fn from(_: XyzD65) -> Self

Converts to this type from the input type.
Source§

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§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.