2013-04-21 9 views
5

別のビットマップにビットマップを描画する必要がありますが、特定の色(この場合は透明)を持つピクセルの上に描画したいだけです。 私はAvoidXfermodeがこれを行うことができると理解していますが、API16以降は非推奨です。 これとは別の方法はありますか?Android AvoidXfermodeはAPI 16以降廃止されましたが、置き換えられますか?

ありがとうございました

+1

http://developer.android.com/reference/android/graphics/AvoidXfermode.html。説明無しに廃止されました。 – Raghunandan

答えて

4

ですですので、私はここでそれを共有します: 交換方法はありません。 AvoidXfermodeはハードウェアでサポートされていないため、非推奨となりました。ただし、ビットマップで描画する場合でも使用できます。

もう1つの方法は、ピクセル単位で、特定の色に置き換えることですが、それは私が探していたものではありません。

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を使用して描画することができ、データのバイト配列、またはキャンバス

+0

アンドロイドキャンバスの仕組みがわかりません。しかし、Webデベロッパーでは、これはキャンバスを使ってimageDataを処理する方法です –

関連する問題