2012-11-15 20 views
5

Kennen Sie eine Quelle oder Informationen über den Vergleich von Bildern in as3/flash?Vergleichen Sie zwei Bilder und überprüfen Sie die Gleichheit

Ich möchte zwei Bilder vergleichen und prüfen, ob die Bilder gleich sind oder nicht.

prüfen dieses Beispiel: http://imageshack.us/photo/my-images/825/imagecompare.jpg/

Irgendwelche Hinweise? Vielen Dank im Voraus!

+0

möglich Duplikat: http: // stackoverflow.com/questions/5427691/comparing-two-bitmaps-against-each-other-for-match-as3 – loxxy

Antwort

3

Neben den doppelten Antworten,

Ich glaube, Sie auch BitmapData.compare()

Ein Beispiel aus der Verbindung, die folgenden zwei Bitmapdata-Objekte verwenden können:

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 

Codebeispiel (für prozentualen Unterschied):

nicht, wie korrekt die Ergebnisse sind, ist das, was ich für einen Prozentsatz gebraut:

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(); 

Wo: info ein TextBox ist, mc1 & mc2 sind zwei Videoclips auf der Bühne .

Ich denke, Sie können es besser machen, indem Sie einzelne Werte vergleichen (d. H. Wie unterschiedlich ein Pixel ist) und nicht eine boolesche is-Pixel-ähnliche Übereinstimmung.


Ergebnis:

enter image description here

+0

danke loxxy, hast du eine Idee, wie es einen prozentualen Unterschied ergeben kann? – apak61

+0

Iterate über jedes Pixel von diffBmpData mit getPixel32 (i, j) ... Zählen Sie diejenigen, die 0 Unterschied geben und verwenden Sie es für Prozent. Für ein großes Bild sollte dies einen fairen Prozentsatz ergeben ... – loxxy

3

Mit BitmapData.compare() (weiß Raum um das runde Bild würde aufgenommen werden) wird 0 zurück, wenn die Pixelwerte identisch sind.

trace(bmd1.compare(bmd2)); // 0 
0

Zusätzlich & xLite Antworten auf loxxy, wenn Sie wissen müssen, wie die BitmapData- aus einer Bilddatei zu erhalten:

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(...) 
} 

Siehe auch loading image by Loader.loadBytes(byteArray)

Verwandte Themen