Skip to main content

ColorProfileSource

Enum ColorProfileSource 

Source
#[non_exhaustive]
pub enum ColorProfileSource<'a> { Icc(&'a [u8]), Cicp(Cicp), Named(NamedProfile), PrimariesTransferPair { primaries: ColorPrimaries, transfer: TransferFunction, }, }
Expand description

A source color profile — either ICC bytes, CICP parameters, a named profile, or a primaries + transfer function pair.

This unified type lets consumers pass decoded image color info directly to a CMS backend without caring whether the source had an ICC profile, CICP codes, or a well-known named profile.

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

Icc(&'a [u8])

Raw ICC profile data.

§

Cicp(Cicp)

CICP parameters (a CMS can synthesize an equivalent profile).

§

Named(NamedProfile)

Well-known named profile.

§

PrimariesTransferPair

Color primaries + transfer function pair.

Covers the full ColorPrimaries × TransferFunction matrix, including combinations that don’t have a NamedProfile variant or a CICP mapping (e.g., Adobe RGB).

A CMS backend that handles this variant can avoid ICC profile parsing entirely for known primaries/transfer combinations.

Fields

§primaries: ColorPrimaries

Color primaries (gamut + white point).

§transfer: TransferFunction

Transfer function (EOTF encoding).

Implementations§

Source§

impl<'a> ColorProfileSource<'a>

Source

pub const fn from_primaries_transfer( primaries: ColorPrimaries, transfer: TransferFunction, ) -> ColorProfileSource<'a>

Create from primaries + transfer function.

Source

pub const fn primaries_transfer( &self, ) -> Option<(ColorPrimaries, TransferFunction)>

Try to extract primaries + transfer, regardless of variant.

Source

pub fn resolve(&self) -> Option<(ColorPrimaries, TransferFunction)>

Resolve to a (primaries, transfer) pair using all available methods, including ICC profile identification when the icc feature is enabled.

This is the most complete resolution path:

  • PrimariesTransferPair — returns directly
  • Named — decomposes via NamedProfile::to_primaries_transfer
  • Cicp — maps via from_cicp, but returns None if matrix_coefficients is non-zero (YCbCr data requires matrix conversion first) or full_range is false (narrow-range data needs range expansion first)
  • Icc — hash-based identification (~100ns, 135 known profiles) + CICP-in-ICC extraction. Returns None for unknown custom profiles.

Returns None when the profile is unknown or when reducing to (primaries, transfer) would discard significant information (YCbCr matrix coefficients, narrow signal range).

Trait Implementations§

Source§

impl<'a> Clone for ColorProfileSource<'a>

Source§

fn clone(&self) -> ColorProfileSource<'a>

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<'a> Debug for ColorProfileSource<'a>

Source§

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

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

impl<'a> PartialEq for ColorProfileSource<'a>

Source§

fn eq(&self, other: &ColorProfileSource<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · 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<'a> Eq for ColorProfileSource<'a>

Source§

impl<'a> StructuralPartialEq for ColorProfileSource<'a>

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, 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.