有3x3图像。 CanvasPixelArray是:
[12,24,48,255,12,24,48,255,12,24,48,255,12,24,48,255,12,24,48,255,12,24,48,255,12,24,48,255,12,24,48,255,12,24,48,255]
我将所有像素的alpha值更改为0并返回:
bobs = this.gfx.getImageData(0,0,3,3).data
for (a=3;a<bobs.data.length;a+=4)
bobs.data[a] = 0
this.gfx.putImageData(bobs,0,0)
bobs = this.gfx.getImageData(0,0,3,3).data
for (a=3;a<bobs.data.length;a+=4)
bobs.data[a] = 255
this.gfx.putImageData(bobs,0,0)
所有像素都变黑了。浏览器将颜色更改为黑色以节省内存。有没有办法防止这种情况,还是应该保存副本?
答案 0 :(得分:2)
我认为其原因是Canvas使用预乘alpha,意味着所有rgb值都乘以这些像素的alpha值。这样做可以加快与背景等的alpha混合。
本文中有一个关于预乘alpha的部分:wikipedia:Alpha_compositing
您可能必须要么保留未修改值的副本,要么保存图像的alpha值并在绘制图像之前设置globalAlpha属性。 (当我说图像时,您可以同样创建一个3x3画布,将像素存储在那里并使用drawImage()将其绘制到主画布上。)