Bon, alors disons que je veux comparer deux BitmapDatas. L'une est une image d'un arrière-plan (pas solide, il a différents pixels), et l'autre est de quelque chose (comme un sprite) sur le même fond. Maintenant, ce que je veux faire est de supprimer l'arrière-plan de la deuxième image, en comparant les deux images, et en supprimant tous les pixels de l'arrière-plan qui sont présents dans la deuxième image. Pour plus de clarté, fondamentalement, je veux faire this en AS3.AS3 - Comparer BitmapDatas, méthode la plus rapide?
Maintenant, j'ai trouvé deux façons de le faire, et ils fonctionnent parfaitement. L'un compare les pixels directement, tandis que l'autre utilise d'abord la méthode BitmapData.compare()
, puis copie les pixels appropriés dans le résultat. Ce que je veux savoir, c'est quel chemin est le plus rapide.
Voici mes deux façons de le faire:
Méthode 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));
}
}
}
Méthode 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));
}
}
}
layer1
est l'arrière-plan, layer2
est l'image l'arrière-plan sera retiré de, et result
est juste un BitmapData
que le résultat sortira sur.
Ce sont très similaires, et personnellement, je n'ai pas remarqué de différence de vitesse, mais je me demandais si quelqu'un sait ce qui serait le plus rapide. Je vais probablement utiliser la méthode 1 de toute façon, car BitmapData.compare()
ne compare pas les pixels alpha, sauf si les couleurs sont identiques, mais je pensais toujours que cela ne ferait pas de mal à demander.
Huh, intéressant. On dirait que blendmode est la meilleure option, la comparaison native est plutôt bonne mais pour un très différent c'est un changement. La vitesse n'est pas vraiment le plus gros problème pour moi, mais je vais voir comment fonctionnent les BlendModes. Je ne marquerai pas ceci comme réponse encore au cas où je verrais ce que les autres ont à dire, mais merci! – puggsoy