2012-11-15 22 views
5

bạn có biết bất kỳ nguồn hoặc thông tin nào về việc so sánh hình ảnh trong vòng as3/flash không?so sánh hai hình ảnh và kiểm tra sự bình đẳng

Tôi muốn so sánh hai hình ảnh và kiểm tra xem các hình ảnh có giống nhau hay không.

Kiểm tra ví dụ này: http://imageshack.us/photo/my-images/825/imagecompare.jpg/

Bất kỳ manh mối? Cảm ơn bạn trước!

+0

thể trùng lặp: http: // stackoverflow.com/questions/5427691/comparing-two-bitmaps-against-each-other-for-match-as3 – loxxy

Trả lời

3

Ngoài các câu trả lời trùng lặp,

Tôi tin rằng bạn cũng có thể sử dụng BitmapData.compare()

Một ví dụ lấy từ liên kết, hãy xem xét hai đối tượng BitmapData sau:

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 

Mẫu mã (đối với chênh lệch tỷ lệ phần trăm):

Đừng bao đúng kết quả là, đây là những gì tôi ủ lên cho một tỷ lệ phần trăm:

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

nơi: thông tin là một TextBox, mc1 & mc2 hai movieclips trên sân khấu .

Tôi nghĩ bạn có thể làm cho nó tốt hơn bằng cách so sánh các giá trị riêng lẻ (ví dụ: pixel khác nhau bao nhiêu) thay vì boolean khớp pixel tương tự pixel.


Kết quả: (không gian trắng xung quanh hình ảnh tròn sẽ được bao gồm)

enter image description here

+0

cảm ơn bạn loxxy, bạn có một ý tưởng, làm thế nào nó có thể dẫn đến một tỷ lệ phần trăm của sự khác biệt? – apak61

+0

Lặp lại trên mỗi pixel của diffBmpData bằng cách sử dụng getPixel32 (i, j) ... Đếm số điểm cho 0 khác biệt và sử dụng nó cho phần trăm. Đối với một hình ảnh lớn, điều này sẽ cung cấp cho một tỷ lệ phần trăm công bằng ... – loxxy

3

Sử dụng BitmapData.compare() sẽ trở lại 0 nếu các giá trị điểm ảnh giống hệt nhau.

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

Ngoài loxxy & câu trả lời xlite, nếu bạn cần phải biết làm thế nào để có được những BitmapData từ một file image:

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

Xem thêm loading image by Loader.loadBytes(byteArray)

Các vấn đề liên quan