aboutsummaryrefslogtreecommitdiffstats
path: root/components/canvas_traits/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/canvas_traits/lib.rs')
-rw-r--r--components/canvas_traits/lib.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/components/canvas_traits/lib.rs b/components/canvas_traits/lib.rs
index db945750a0c..d148baf0550 100644
--- a/components/canvas_traits/lib.rs
+++ b/components/canvas_traits/lib.rs
@@ -552,3 +552,21 @@ pub fn byte_swap(data: &mut [u8]) {
i += 4;
}
}
+
+pub fn byte_swap_and_premultiply(data: &mut [u8]) {
+ let length = data.len();
+
+ let mut i = 0;
+ while i < length {
+ let r = data[i + 2];
+ let g = data[i + 1];
+ let b = data[i + 0];
+ let a = data[i + 3];
+
+ data[i + 0] = ((r as u32) * (a as u32) / 255) as u8;
+ data[i + 1] = ((g as u32) * (a as u32) / 255) as u8;
+ data[i + 2] = ((b as u32) * (a as u32) / 255) as u8;
+
+ i += 4;
+ }
+}