mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Merge byte swap and unmultiplying loops in ctx.getImageData()
This commit is contained in:
parent
983a914da3
commit
b5c469d52e
2 changed files with 6 additions and 10 deletions
|
@ -458,11 +458,7 @@ impl<'a> CanvasData<'a> {
|
||||||
canvas_size: Size2D<f64>,
|
canvas_size: Size2D<f64>,
|
||||||
chan: IpcSender<ByteBuf>,
|
chan: IpcSender<ByteBuf>,
|
||||||
) {
|
) {
|
||||||
let mut dest_data = self.read_pixels(dest_rect, canvas_size);
|
chan.send(self.read_pixels(dest_rect, canvas_size).into()).unwrap();
|
||||||
|
|
||||||
// bgra -> rgba
|
|
||||||
byte_swap(&mut dest_data);
|
|
||||||
chan.send(dest_data.into()).unwrap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#dom-context-2d-putimagedata
|
// https://html.spec.whatwg.org/multipage/#dom-context-2d-putimagedata
|
||||||
|
|
|
@ -1115,12 +1115,12 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
|
||||||
self.send_canvas_2d_msg(Canvas2dMsg::GetImageData(dest_rect, canvas_size, sender));
|
self.send_canvas_2d_msg(Canvas2dMsg::GetImageData(dest_rect, canvas_size, sender));
|
||||||
let mut data = receiver.recv().unwrap();
|
let mut data = receiver.recv().unwrap();
|
||||||
|
|
||||||
// Un-premultiply alpha
|
// Byte swap and unmultiply alpha.
|
||||||
for chunk in data.chunks_mut(4) {
|
for chunk in data.chunks_mut(4) {
|
||||||
let alpha = chunk[3] as usize;
|
let (b, g, r, a) = (chunk[0], chunk[1], chunk[2], chunk[3]);
|
||||||
chunk[0] = UNPREMULTIPLY_TABLE[256 * alpha + chunk[0] as usize];
|
chunk[0] = UNPREMULTIPLY_TABLE[256 * (a as usize) + r as usize];
|
||||||
chunk[1] = UNPREMULTIPLY_TABLE[256 * alpha + chunk[1] as usize];
|
chunk[1] = UNPREMULTIPLY_TABLE[256 * (a as usize) + g as usize];
|
||||||
chunk[2] = UNPREMULTIPLY_TABLE[256 * alpha + chunk[2] as usize];
|
chunk[2] = UNPREMULTIPLY_TABLE[256 * (a as usize) + b as usize];
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageData::new(&self.global(), sw, sh, Some(data.to_vec()))
|
ImageData::new(&self.global(), sw, sh, Some(data.to_vec()))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue