as3/flash 内で画像を比較することに関するソースまたは情報を知っていますか?
2つの画像を比較して、画像が同じかどうかを確認したい。
この例を確認してください: http://imageshack.us/photo/my-images/825/imagecompare.jpg/
手がかりはありますか?前もって感謝します!
as3/flash 内で画像を比較することに関するソースまたは情報を知っていますか?
2つの画像を比較して、画像が同じかどうかを確認したい。
この例を確認してください: http://imageshack.us/photo/my-images/825/imagecompare.jpg/
手がかりはありますか?前もって感謝します!
を使用すると、ピクセル値が同一である場合BitmapData.compare()
に返されます。0
trace(bmd1.compare(bmd2)); // 0
重複した回答に加えて、
BitmapData.compare()も使用できると思います
リンクから取った例として、次の 2 つの BitmapData オブジェクトを考えてみましょう。
var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFFFF8800);
var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCCC6600);
var diffBmpData:BitmapData = bmd1.compare(bmd2) as BitmapData;
trace ("0x" + diffBmpData.getPixel(0,0).toString(16); // 0x332200
コード例 (パーセンテージ差) :
結果がどれほど正しいかはわかりませんが、これは私がパーセンテージで醸造したものです:
var bmd1:BitmapData = new BitmapData(225, 225);
bmd1.draw(mc1);
var bmd2:BitmapData = new BitmapData(225, 225);
bmd2.draw(mc2);
var diffBmpData:BitmapData = bmd1.compare(bmd2) as BitmapData;
var diff:int = 0;
var total:int = 225 * 225;
for(var i=0; i<225; i++)
for(var j=0; j<225; j++)
diff += (diffBmpData.getPixel(i,j) != 0)? 1 : 0;
info.text = Math.round((diff / total * 100)).toString();
ここで、infoは TextBox、mc1とmc2はステージ上の 2 つのムービークリップです。
ブール値の is-pixel-similar一致ではなく、個々の値 (つまり、ピクセルがどれだけ異なるか) を比較することで改善できると思います。
結果:(丸い画像の周りの空白が含まれます)
loxxy & xLite の回答に加えて、画像ファイルから BitmapData を取得する方法を知る必要がある場合:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
loader.load( new URLRequest ( "http://www.fake.url.path/image.jpg" ) );
function onLoaded(e:Event):void {
var bmp:Bitmap = loader.content as Bitmap;
var bitmapData:BitmapData = bmp.data;
//bitmapData.Compare(...)
}
Loader.loadBytes(byteArray) によるイメージのロードも参照してください。