summaryrefslogtreecommitdiffstats
path: root/src/color.rs
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2020-07-06 23:04:10 -0400
committerTavian Barnes <tavianator@tavianator.com>2020-08-24 11:10:13 -0400
commit6ba084db4ba375eacaa1677fd75de318c12170c7 (patch)
tree9122e889fcc47d8f6ebd71717a8cb35a98ebafdb /src/color.rs
parent39c0348c9f98b4dd29bd112a0a2a42faa67c92d4 (diff)
downloadkd-forest-6ba084db4ba375eacaa1677fd75de318c12170c7.tar.xz
Bump acap to 0.2.0
This requires adapting to the new k-d trees, which are significantly faster.
Diffstat (limited to 'src/color.rs')
-rw-r--r--src/color.rs39
1 files changed, 4 insertions, 35 deletions
diff --git a/src/color.rs b/src/color.rs
index ff113a7..81d9689 100644
--- a/src/color.rs
+++ b/src/color.rs
@@ -3,7 +3,7 @@
pub mod order;
pub mod source;
-use acap::coords::{Coordinates, CoordinateMetric, CoordinateProximity};
+use acap::coords::Coordinates;
use acap::distance::{Metric, Proximity};
use acap::euclid::{EuclideanDistance, euclidean_distance};
@@ -15,10 +15,9 @@ use std::ops::Index;
pub type Rgb8 = Rgb<u8>;
/// A [color space](https://en.wikipedia.org/wiki/Color_space).
-pub trait ColorSpace: Copy + From<Rgb8>
- + Coordinates
- + Metric
- + CoordinateMetric<<Self as Coordinates>::Value, Distance = <Self as Proximity>::Distance>
+pub trait ColorSpace: Copy + From<Rgb8> + Coordinates + Metric
+where
+ Self::Value: PartialOrd<Self::Distance>,
{
/// Compute the average of the given colors.
fn average<I: IntoIterator<Item = Self>>(colors: I) -> Self;
@@ -68,16 +67,6 @@ impl Proximity for RgbSpace {
impl Metric for RgbSpace {}
-impl CoordinateProximity<f64> for RgbSpace {
- type Distance = EuclideanDistance<f64>;
-
- fn distance_to_coords(&self, other: &[f64]) -> Self::Distance {
- euclidean_distance(&self.0, other)
- }
-}
-
-impl CoordinateMetric<f64> for RgbSpace {}
-
impl ColorSpace for RgbSpace {
fn average<I: IntoIterator<Item = Self>>(colors: I) -> Self {
let mut sum = [0.0, 0.0, 0.0];
@@ -194,16 +183,6 @@ impl Proximity for LabSpace {
impl Metric for LabSpace {}
-impl CoordinateProximity<f64> for LabSpace {
- type Distance = EuclideanDistance<f64>;
-
- fn distance_to_coords(&self, other: &[f64]) -> Self::Distance {
- euclidean_distance(&self.0, other)
- }
-}
-
-impl CoordinateMetric<f64> for LabSpace {}
-
impl ColorSpace for LabSpace {
fn average<I: IntoIterator<Item = Self>>(colors: I) -> Self {
let mut sum = [0.0, 0.0, 0.0];
@@ -280,16 +259,6 @@ impl Proximity for LuvSpace {
impl Metric for LuvSpace {}
-impl CoordinateProximity<f64> for LuvSpace {
- type Distance = EuclideanDistance<f64>;
-
- fn distance_to_coords(&self, other: &[f64]) -> Self::Distance {
- euclidean_distance(&self.0, other)
- }
-}
-
-impl CoordinateMetric<f64> for LuvSpace {}
-
impl ColorSpace for LuvSpace {
fn average<I: IntoIterator<Item = Self>>(colors: I) -> Self {
let mut sum = [0.0, 0.0, 0.0];