2012-09-01 88 views
3

我有兩個類似的BitmapData,我想比較它們並獲得它們相似的百分比。 (我想我應該使用BitmapData的compare()和threshold()方法,但不知道如何)(或者簡單地使用getPixel並比較每個像素的像素,但我不知道它是否對性能有好處)在ActionScript 3中比較兩個位圖

+0

當我說:「類似的」我的意思是,他們在幾個像素不同,但它不」這很重要,他們是不同的,我想他們的差異的百分比(他們是相同的寬度和高度) – dede

+0

@dede嘗試看看這個答案:http://stackoverflow.com/questions/2544330/comparing-bitmap -data-in-as3-pixel-for-pixel – francis

+0

謝謝,但我不能得到太多的幫助:( – dede

回答

5

下面是一個使用比較和getVector,假設兩個位圖數據對象是相同的寬度和高度,一個簡單的辦法:

var percentDifference:Number = getBitmapDifference(bitmapData1, bitmapData2); 

private function getBitmapDifference(bitmapData1:BitmapData, bitmapData2:BitmapData):Number 
{ 
    var bmpDataDif:BitmapData = bitmapData1.compare(bitmapData2) as BitmapData; 
    if(!bmpDataDif) 
     return 0; 
    var differentPixelCount:int = 0; 

    var pixelVector:Vector.<uint> = bmpDataDif.getVector(bmpDataDif.rect); 
    var pixelCount:int = pixelVector.length; 

    for (var i:int = 0; i < pixelCount; i++) 
    { 
     if (pixelVector[i] != 0) 
      differentPixelCount ++; 
    } 

    return (differentPixelCount/pixelCount)*100; 
} 
+1

不錯的例子+1。我有一個小改進建議:可以使用[getVector()](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html# getVector())方法。單個循環應該更快。 –

+0

謝謝,改變它使用矢量。 –