5

您知道有关在 as3/flash 中比较图像的任何来源或信息吗?

我想比较两张图像并检查图像是否相同。

检查这个例子:http: //imageshack.us/photo/my-images/825/imagecompare.jpg/

有什么线索吗?先感谢您!

4

3 回答 3

3

除了重复的答案,

我相信你也可以使用BitmapData.compare()

取自链接的示例,请考虑以下两个 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是一个文本框,mc1mc2是舞台上的两个影片剪辑。

我认为您可以通过比较单个值(即像素有多少不同)而不是布尔值是像素相似匹配来使其变得更好。


结果:(将包括圆形图像周围的空白区域)

在此处输入图像描述

于 2012-11-15T17:24:58.673 回答
3

如果像素值相同,则使用BitmapData.compare()将返回。0

trace(bmd1.compare(bmd2)); // 0
于 2012-11-15T21:32:26.663 回答
0

除了 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) 加载图像

于 2012-11-15T22:30:24.777 回答