1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use traits::{Primitive, ChannelMax};
use super::{Rgb, Gray, cie, rgb};
fn srgb_to_luminance<T: Primitive + ChannelMax, V: Primitive + ChannelMax>(rgb: Rgb<T>) -> V
where super::Rgb<f32>: From<super::Rgb<T>>
{
let Rgb::<f32>(rgb) = rgb.into();
rgb::srgb_compress_gamma(cie::rgb_to_y(rgb[0], rgb[1], rgb[2]))
}
impl<T: Primitive + ChannelMax> From<Rgb<T>> for Gray<T>
where super::Rgb<f32>: From<super::Rgb<T>>
{
fn from(other: Rgb<T>) -> Self {
Gray([srgb_to_luminance(other)])
}
}