そうですね、2 つの BitmapData を比較したいとしましょう。1 つは背景の画像 (無地ではなく、さまざまなピクセルがあります) で、もう 1 つはまったく同じ背景の上にあるもの (スプライトなど) の画像です。今私がやりたいことは、2 つの画像を比較し、2 番目の画像に存在する背景からすべてのピクセルを削除することによって、2 番目の画像から背景を削除することです。わかりやすくするために、基本的には AS3 でこれを行いたいと考えています。
今、私はこれを行う 2 つの方法を思いつきましたが、どちらも完璧に機能します。1 つはピクセルを直接比較し、もう 1 つはBitmapData.compare()
最初にメソッドを使用してから、適切なピクセルを結果にコピーします。私が知りたいのは、どちらの方法がより速いかということです。
これが私の2つの方法です。
方法 1
for (var j:int = 0; j < layer1.height; j++)
{
for (var i:int = 0; i < layer1.width; i++)
{
if (layer1.getPixel32(i, j) != layer2.getPixel32(i, j))
{
result.setPixel32(i, j, layer2.getPixel32(i, j));
}
}
}
方法 2
result = layer1.compare(layer2) as BitmapData;
for (var j:int = 0; j < layer1.height; j++)
{
for (var i:int = 0; i < layer1.width; i++)
{
if (result.getPixel32(i, j) != 0x00000000)
{
result.setPixel32(i, j, layer2.getPixel32(i, j));
}
}
}
layer1
は背景、layer2
は背景が削除されるイメージ、は結果が表示されるresult
単なるBitmapData
です。
これらは非常に似ており、個人的には速度の違いに気づいていませんが、どちらが速いか誰かが知っているかどうか疑問に思っていました. 色が同一でない限りピクセルアルファを比較しないため、おそらく方法1を使用しますBitmapData.compare()
が、それでも質問しても問題ないと思いました。