替换imageData失败中的颜色

时间:2014-05-08 05:00:17

标签: javascript canvas

我有这个脚本。

var oriToCopy = function(){
    while(pps.length > 0){
        var pp = pps.pop();
        layerDataCopy.data[pp] = layerDataOri.data[pp];
        layerDataCopy.data[pp + 1] = layerDataOri.data[pp + 1];
        layerDataCopy.data[pp + 2] = layerDataOri.data[pp + 2];
    }
    ctxCopy.putImageData(layerDataCopy, 0, 0);
}

其中: pps是画布中像素位置的数组 layerDataOri是来自原始画布的imageData layerDataCopy是来自Copy canvas
的imageData

我要做的是将layerDataOri.data[pps]的layerDataOri复制到layerDataCopy.data[pps]。我检查pps位置的像素不是透明像素,但是当将此像素复制到layerDataCopy时,它不受影响,复制画布仍然是透明的。

出了什么问题?

1 个答案:

答案 0 :(得分:0)

确保您还复制Alpha通道,因为每个像素由四个通道(RGBA)组成:

layerDataCopy.data[pp] = layerDataOri.data[pp];
layerDataCopy.data[pp + 1] = layerDataOri.data[pp + 1];
layerDataCopy.data[pp + 2] = layerDataOri.data[pp + 2];
layerDataCopy.data[pp + 3] = layerDataOri.data[pp + 3]; // alpha

请注意,pp也必须量化4以指向有效像素(您现在显示如何在问题中生成位置,以防万一)。

如果您从中获取复制缓冲区的画布为空白(没有任何内容),则默认情况下所有像素都是透明的。因此,在复制过程中,在像素上复制alpha通道时,将保持透明。

如果复制缓冲区未包含任何数据(速度更快),您也可以使用createImageData代替getImageData