对,我们假设我想比较两个BitmapDatas。一个是背景图像(不是固体,它具有不同的像素),另一个是背景完全相同的东西(如精灵)。现在我想要做的是从第二张图片中删除背景,比较两张图片,并从背景中删除第二张图片中的所有像素。 为了清楚起见,我基本上想在AS3中做this。AS3 - 比较BitmapDatas,最快的方法?
现在我想出了两种方法来做到这一点,他们都完美地工作。一个直接比较像素,而另一个首先使用BitmapData.compare()
方法,然后将适当的像素复制到结果中。我想知道哪种方式更快。
这里是我做这件事的方法有两种:
方法1
for (var j:int = 0; j < layer1.height; j++)
{
for (var i:int = 0; i < layer1.width; i++)
{
if (layer1.getPixel32(i, j) != layer2.getPixel32(i, j))
{
result.setPixel32(i, j, layer2.getPixel32(i, j));
}
}
}
方法2
result = layer1.compare(layer2) as BitmapData;
for (var j:int = 0; j < layer1.height; j++)
{
for (var i:int = 0; i < layer1.width; i++)
{
if (result.getPixel32(i, j) != 0x00000000)
{
result.setPixel32(i, j, layer2.getPixel32(i, j));
}
}
}
为背景,layer2
是图片的背景将从中删除,并result
只是一个BitmapData
,结果会出来。
这些非常相似,我个人并没有注意到速度上的差异,但我只是想知道是否有人知道哪个更快。我可能会使用方法1,因为BitmapData.compare()
不会比较像素阿尔法,除非颜色相同,但我仍然认为它不会受到伤害。
嗯,有趣。看起来像blendmode是最好的选择,本地比较是相当不错的,但对于非常不同,这是一个很大的变化。速度对我来说不是最大的问题,但我会研究BlendModes是如何工作的。我不会将此标记为答案,以防其他人不得不说,但谢谢! – puggsoy