簡體   English   中英

自API 16起,不推薦使用Android PreventXfermode,是否可以替代?

[英]Android AvoidXfermode is deprecated since API 16, is there a replacement?

我需要在另一個位圖上繪制一個位圖,但是我只想在具有特定顏色(在這種情況下為透明)的像素上繪制。 我了解到, AvoidXfermode可以做到這一點,但是自API 16開始不推薦使用。現在是否有與此不同的方法?

謝謝

我在私人收件箱中收到了正確的答案,因此我將在這里分享:沒有替代方法。 由於不支持在硬件中使用,因此不建議使用AvoidXfermode 但是,在位圖上繪制時仍可以使用它。

當然,另一種方法是逐像素移動,並用特定的顏色替換,但這不是我想要的。

假設位圖大小相同,我們開始。

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繪制的字節數據數組或畫布(實際上可以將其用作新Image)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM