Skip to main content

ColorPrimaries

Enum ColorPrimaries 

Source
#[non_exhaustive]
#[repr(u8)]
pub enum ColorPrimaries { Bt709 = 1, Bt2020 = 9, DisplayP3 = 12, AdobeRgb = 13, Unknown = 255, }
Expand description

Color primaries (CIE xy chromaticities of R, G, B) and white point.

Each variant is a complete “named recipe” — primaries and white point are an inseparable pair (following CICP convention). Use from_cicp() / to_cicp() for CICP mapping. Discriminant values are internal.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Bt709 = 1

BT.709 / sRGB (CICP 1). White point: D65.

§

Bt2020 = 9

BT.2020 / BT.2100 (CICP 9). Wide gamut for HDR. White point: D65.

§

DisplayP3 = 12

Display P3 (CICP 12, SMPTE EG 432-1). Apple ecosystem. Same RGB primaries as DCI-P3, white point: D65.

§

AdobeRgb = 13

Adobe RGB (1998). Wide gamut. White point: D65.

§

Unknown = 255

Primaries not known.

Implementations§

Source§

impl ColorPrimaries

Source

pub const WHITE_D65: (f32, f32)

D65 white point (BT.709, BT.2020, Display P3, Adobe RGB).

Source

pub const fn chromaticity(self) -> Option<((f32, f32), (f32, f32), (f32, f32))>

CIE 1931 xy chromaticity coordinates of the RGB primaries.

Returns ((rx, ry), (gx, gy), (bx, by)) or None for Unknown. These are the canonical coordinates from the relevant standards (ITU-R BT.709, BT.2020, SMPTE EG 432-1, etc.).

Source

pub const fn from_cicp(code: u8) -> Option<ColorPrimaries>

Map a CICP color_primaries code to a ColorPrimaries.

Source

pub const fn to_cicp(self) -> Option<u8>

Convert to the CICP color_primaries code.

Source

pub const fn white_point(self) -> (f32, f32)

CIE 1931 xy chromaticity of this color space’s white point.

Source

pub const fn gamut_matrix_to(self, dst: ColorPrimaries) -> Option<[[f32; 3]; 3]>

Compute the 3×3 linear RGB gamut conversion matrix from self to dst.

Bradford chromatic adaptation is applied automatically when white points differ (e.g., DCI-P3 D50 → sRGB D65). Returns None for Unknown primaries. Identity conversions (same primaries) return the identity matrix.

The matrix operates in linear light — apply EOTF before, OETF after.

let m = ColorPrimaries::DisplayP3.gamut_matrix_to(ColorPrimaries::Bt709).unwrap();
// White maps to white
let r = m[0][0] + m[0][1] + m[0][2];
assert!((r - 1.0).abs() < 1e-4);
Source

pub const fn contains(self, other: ColorPrimaries) -> bool

Whether self fully contains the gamut of other.

Returns false when white points differ (cross-adapted containment is not defined without a chromatic adaptation transform). D65 hierarchy: BT.2020 > Display P3 > Adobe RGB ≈ BT.709.

Trait Implementations§

Source§

impl Clone for ColorPrimaries

Source§

fn clone(&self) -> ColorPrimaries

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl ColorPrimariesExt for ColorPrimaries

Source§

fn to_xyz_matrix(&self) -> Option<&'static GamutMatrix>

Linear RGB → CIE XYZ (D65 white point). Read more
Source§

fn from_xyz_matrix(&self) -> Option<&'static GamutMatrix>

CIE XYZ (D65 white point) → linear RGB. Read more
Source§

impl Copy for ColorPrimaries

Source§

impl Debug for ColorPrimaries

Source§

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

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

impl Default for ColorPrimaries

Source§

fn default() -> ColorPrimaries

Returns the “default value” for a type. Read more
Source§

impl Display for ColorPrimaries

Source§

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

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

impl Eq for ColorPrimaries

Source§

impl Hash for ColorPrimaries

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for ColorPrimaries

Source§

fn eq(&self, other: &ColorPrimaries) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for ColorPrimaries

Auto Trait Implementations§

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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.