Add gamut mapping and realizability checking

Introduces four gamut mapping strategies on `Rgb` and the `ColorSpace` trait: `clip_to_gamut()` (clamp), `scale_to_gamut()` (linear RGB scaling), `compress_to_gamut()` (CIELAB chroma reduction, feature-gated behind `space-lab`), and `perceptually_map_to_gamut()` (LMS scaling relative to reference white) — each with `with_gamut_*` builder variants. Adds `is_in_gamut()` on `Rgb` and the `ColorSpace` trait for checking whether a color falls within an RGB gamut, and `is_realizable()` on `Xyz` and the `ColorSpace` trait for checking physical realizability against the observer's spectral locus. `Rgb::from_normalized` and `LinearRgb::from_normalized` no longer clamp values to 0.0-1.0, preserving out-of-gamut information for gamut mapping workflows. fixes #2


Author aaronmallen.dev
Date Commit Parent db460eac Change ID
+784 -11
6 changed files
+784 -11
6 changed files