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.
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue