0
我想使用画布来掩饰图像使用几个单独的面具(我设法把他们每个人在一个单独的ImageData对象)。无法对ImageData对象执行多个操作?
蒙版图像是黑色和白色,没有alpha通道。我需要将遮罩层叠在一起,所以我需要(un?)预乘alpha,或将红色通道放在alpha通道中。
当我尝试仅将一个蒙版应用于原始图像时,它的效果非常好,但当我尝试使用多个蒙版时会中断。我做这样的:
base.iMask = function(cx, imgData, maskLeft, maskRight, maskTop, maskBottom) {
var index = 0;
var newdata = cx.createImageData(imgData);
for (var i=0; i<maskLeft.width; i++) {
for (var j=0; j<maskLeft.height; j++) {
index = (i*4)*maskLeft.width+(j*4);
newdata.data[index+3] = maskLeft.data[index];
}
}
// The same cycle is repeated for each mask (4 total)
return newdata;
的问题是,只有最后的面具被应用。我试图在每个循环之前使用putImageData,然后使用getImageData,但它不起作用!
对ImageData()对象执行(un)预乘的函数可以解决我的问题。有任何想法吗?