5

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

ありがとうございました

4

2 に答える 2

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 を使用して描画できるデータのバイト配列、またはキャンバス (基本的に新しい画像として使用できる) のいずれかです。

于 2013-04-22T01:06:48.183 に答える