Optimize Color32::from_rgba_unmultiplied

This commit is contained in:
Emil Ernerfeldt 2021-01-07 16:28:22 +01:00
parent 752c321a61
commit e8e53e9500

View file

@ -57,11 +57,20 @@ impl Color32 {
/// From `sRGBA` WITHOUT premultiplied alpha.
pub fn from_rgba_unmultiplied(r: u8, g: u8, b: u8, a: u8) -> Self {
if a == 255 {
Self::from_rgba_premultiplied(r, g, b, a) // common-case optimization
Self::from_rgba_premultiplied(r, g, b, 255) // common-case optimization
} else if a == 0 {
Self::TRANSPARENT // common-case optimization
} else {
Rgba::from(Self::from_rgb(r, g, b))
.multiply(a as f32 / 255.0)
.into()
let r_lin = linear_from_gamma_byte(r);
let g_lin = linear_from_gamma_byte(g);
let b_lin = linear_from_gamma_byte(b);
let a_lin = linear_from_alpha_byte(a);
let r = gamma_byte_from_linear(r_lin * a_lin);
let g = gamma_byte_from_linear(g_lin * a_lin);
let b = gamma_byte_from_linear(b_lin * a_lin);
Self::from_rgba_premultiplied(r, g, b, a)
}
}