2013-02-18 52 views
0

我想比较位图1和位图2,如果它们等于0,我希望它们做一些事情。所以为了看到它返回什么,我添加了一个跟踪。但它似乎正在寻找与我预期完全不同的东西。这是代码:比较位图不起作用

var scratch_c : Scratch_card = new Scratch_card(); 
var backgr: Background = new Background(); 
var mouseclick:Number; 
var masking:Sprite = new Sprite() 

var bmd1:BitmapData = new BitmapData(742, 165); 
var bm:Bitmap = new Bitmap(bmd1); 
addChild (bm); 
bm.x=20; 
bm.y=40; 
bmd1.draw(scratch_c); 

var bmd2:BitmapData = new BitmapData(742, 165); 
var bm2:Bitmap = new Bitmap(bmd2); 
addChild (bm2); 
bm2.x=20; 
bm2.y=40; 
bmd2.draw(backgr); 
bm2.mask = masking; 
addChild(masking); 


stage.addEventListener(MouseEvent.MOUSE_DOWN, Pressing); 
stage.addEventListener(MouseEvent.MOUSE_MOVE, Moving); 
stage.addEventListener(MouseEvent.MOUSE_UP, Lifting); 


function Pressing(event:MouseEvent):void { 
mouseclick = 1; 
} 


function Moving(event:MouseEvent):void { 
if (mouseclick == 1) { 
masking.graphics.beginFill(0x000000); 
masking.graphics.drawEllipse(mouseX, mouseY, 70, 60); 
masking.graphics.endFill(); 

} 
} 


function Lifting(event:MouseEvent):void { 
trace(bmd1.compare(bmd2)); 
mouseclick = 0; 
} 

这是它被描绘出Trace:

我怎样才能使它比较BMD 1和BMD2的像素? 为什么它不返回一个数字?

回答

3

不是一个百分比,但它应该返回一个新的BitMapData对象,您可以指定为图像。 BitMapData.compare()

返回Object - 如果两个BitmapData对象具有相同的尺寸(宽度和高度),该方法返回具有两个对象之间的差异的新的BitmapData对象(见所述主要讨论)。如果BitmapData对象是等价的,则该方法返回数字0.如果BitmapData对象的宽度不相等,则该方法返回数字-3。如果BitmapData对象的高度不相等,则该方法返回数字-4。

here

结果摘自:

你的位图是不等价的,这就是为什么你会得到由2个不同的位图对象。

+0

我怎么可以将其指定为别的东西的图像?我有点困惑,它被蒙上了脸,并没有完全解除,为什么它仍然回来? – tailedmouse 2013-02-18 18:50:33

+0

首先你在第二个'bmd2.draw(backgr);'上做'bmd1.draw(scratch_c);''。在我看来,这是你的BitmapData差异的原因。希望我帮助你。 – vikingmaster 2013-02-18 19:05:30

+0

hummm只是为了测试的目的,我再次添加了同一张图片的副本,而没有将其添加到舞台上。以及它确实返回0 ..现在我的问题变成...我只能知道整个图像已被揭露或辱骂后,我怎么能比较它们..我只想比较蒙版图像的部分与整体如果它返回0我希望它做的事 – tailedmouse 2013-02-18 19:14:34

1

你有你的代码看多一点但是经过尝试

if(bmd1.compare(bmd2) == bmd2){ 
    // complete 
} 

。我认为你需要测试掩蔽而不是bmd1
所以像这样的东西。

var mymask:BitmapData = new BitmapData(742, 165, true,0x000000000); 
mymask.draw(masking); 

if(mymask.compare(bmd2) == bmd2){ 
    // complete 
} 

未经测试的代码,但应该把你在正确的道路

+0

谢谢我做了一个答案oce了,但它离我问的地方非常远..我并没有真正起诉位图所有我一起使用更好的代码来测试掩蔽 – tailedmouse 2013-02-19 00:55:30