画布PutImageData颜色丢失没有/低alpha

时间:2011-05-04 12:18:22

标签: javascript html5 canvas getimagedata

有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)

所有像素都变黑了。浏览器将颜色更改为黑色以节省内存。有没有办法防止这种情况,还是应该保存副本?

1 个答案:

答案 0 :(得分:2)

我认为其原因是Canvas使用预乘alpha,意味着所有rgb值都乘以这些像素的alpha值。这样做可以加快与背景等的alpha混合。

本文中有一个关于预乘alpha的部分:wikipedia:Alpha_compositing

您可能必须要么保留未修改值的副本,要么保存图像的alpha值并在绘制图像之前设置globalAlpha属性。 (当我说图像时,您可以同样创建一个3x3画布,将像素存储在那里并使用drawImage()将其绘制到主画布上。)

相关问题