Android AvoidXfermode自API 16起已被弃用,是否有替代品?

5

我需要在另一个位图上绘制一个位图,但我只想在具有特定颜色(在这种情况下是透明的)的像素顶部绘制。 我知道 AvoidXfermode 可以做到这一点,但自API 16以来已被弃用。 现在是否有不同的方法?

谢谢


1
http://developer.android.com/reference/android/graphics/AvoidXfermode.html。已弃用,但没有解释。 - Raghunandan
2个回答

4
我在私人信箱里收到了正确的答案,现在分享给大家: 没有替代方法。 AvoidXfermode已经被废弃了,因为它不被硬件支持。然而,在绘制位图时仍然可以使用它。
当然,另一种方法是逐像素地进行操作,并替换特定颜色的像素,但这不是我想要的。

1

我们假设位图的大小相同。

var image1, image2;

var newCanvas = document.createElement('canvas');
var newContext = newCanvas.getContext('2d');
newCanvas.width = image1.width;
newCanvas.height = image1.height;
newContext.drawImage(image1, 0, 0);
var imgData = newContext.getImageData(0,0,newCanvas.width, newCanvas.height);
newContext.drawImage(image2, 0, 0);
var imgData2 = newContext.getImageData(0,0,newCanvas.width, newCanvas.height);

for (var i = 0; i < imgData.data.length; i += 4) {
    if( imgData.data[i] < 20        //If Red is less than 20
        && imgData.data[i+1] == 40    //If Green is 40
        && imgData.data[i+2] >= 240   //If Blue is over 240
        && imgData.data[i+3] >= 240) //If Alpha is over 240
    {
        imgData.data[i] = imgData2.data[i];
        imgData.data[i+1] = imgData2.data[i+1];
        imgData.data[i+2] = imgData2.data[i+2];
        imgData.data[i+3] = imgData2.data[i+3];
    }
}
imgData2 = null;
newContext.putImageData(imgData, 0, 0);

如果任何像素符合这些参数,那么它应该只是按原样复制。
最终结果要么是imgData,即一个数据的字节数组,您可以使用putImageData来绘制,要么是画布(您可以将其视为新图像)。

我不知道安卓画布是如何工作的。但在Web开发中,我们会使用画布(canvas)来处理图像数据(imageData)。 - Jack Franzen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接