对,假设我想比较两个 BitmapData。一个是背景图像(不是实心的,它有不同的像素),另一个是完全相同的背景之上的某物(如精灵)。现在我想要做的是从第二个图像中删除背景,通过比较两个图像,并从背景中删除第二个图像中存在的所有像素。为了清楚起见,基本上我想在 AS3中执行此操作。
现在我想出了两种方法来做到这一点,它们都可以完美地工作。一个直接比较像素,而另一个BitmapData.compare()
先使用该方法,然后将适当的像素复制到结果中。我想知道哪种方式更快。
这是我的两种方法:
方法一
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));
}
}
}
方法二
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));
}
}
}
layer1
是背景,layer2
是背景将被删除的图像,并且result
只是BitmapData
结果将出现的图像。
这些非常相似,我个人没有注意到速度上有任何差异,但我只是想知道是否有人知道哪个会更快。无论哪种方式,我都可能会使用方法 1,因为BitmapData.compare()
除非颜色相同,否则不会比较像素 alpha,但我仍然认为问它不会有坏处。