ph-color 0.1.1

Fixed-point no_std color math for embedded targets: conversion, transfer functions, matrices, gain, and interpolation
Documentation
//! Open color-space trait and the built-in sRGB space.

use crate::chromaticities::Chromaticities;

/// A color space. Open: consumers define their own (including per-panel).
///
/// [`PRIMARIES`](ColorSpace::PRIMARIES) and [`WHITE`](ColorSpace::WHITE) are
/// identity metadata. This crate does not derive matrices from them.
pub trait ColorSpace {
    /// CIE xy primaries (R, G, B) in millionths.
    const PRIMARIES: [Chromaticities; 3];
    /// White point in millionths.
    const WHITE: Chromaticities;
    /// Stable name for diagnostics and bake provenance.
    const NAME: &'static str;
}

/// Marker for spaces that may be interpolated while encoded.
pub trait Perceptual {}

/// ITU-R BT.709 / sRGB primaries and D65, as identity metadata only.
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub struct Srgb;

impl ColorSpace for Srgb {
    const PRIMARIES: [Chromaticities; 3] = [
        Chromaticities::from_millionths(640_000, 330_000),
        Chromaticities::from_millionths(300_000, 600_000),
        Chromaticities::from_millionths(150_000, 60_000),
    ];
    const WHITE: Chromaticities = Chromaticities::from_millionths(312_700, 329_000);
    const NAME: &'static str = "sRGB";
}