Optimize Color32::from_rgba_unmultiplied
This commit is contained in:
parent
752c321a61
commit
e8e53e9500
1 changed files with 13 additions and 4 deletions
|
@ -57,11 +57,20 @@ impl Color32 {
|
||||||
/// From `sRGBA` WITHOUT premultiplied alpha.
|
/// From `sRGBA` WITHOUT premultiplied alpha.
|
||||||
pub fn from_rgba_unmultiplied(r: u8, g: u8, b: u8, a: u8) -> Self {
|
pub fn from_rgba_unmultiplied(r: u8, g: u8, b: u8, a: u8) -> Self {
|
||||||
if a == 255 {
|
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 {
|
} else {
|
||||||
Rgba::from(Self::from_rgb(r, g, b))
|
let r_lin = linear_from_gamma_byte(r);
|
||||||
.multiply(a as f32 / 255.0)
|
let g_lin = linear_from_gamma_byte(g);
|
||||||
.into()
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue