Je ne suis pas en mesure de trouver une implémentation d'algorithme d'inondation pour Android.Algorithme Floodfill dans Android
Une idée si une API floodfill est disponible dans Android, et sinon, existe-t-il une autre alternative?
Je ne suis pas en mesure de trouver une implémentation d'algorithme d'inondation pour Android.Algorithme Floodfill dans Android
Une idée si une API floodfill est disponible dans Android, et sinon, existe-t-il une autre alternative?
Avez-vous une définition de la forme?
Si oui, jetez un oeil à la Canvas docs. Vous pouvez remplir une région en définissant une zone de clip, puis en appelant canvas.drawColor.
exemple rugueux:
Rect r = new Rect(0,0,300,300);
canvas.clipRect(r); // see also clipRegion
canvas.drawColor(Color.RED);
Il existe plusieurs fonctions de clip, de sorte que vous devriez être en mesure construire tout ce que vous essayez de remplir. En revanche, si vous voulez remplir une zone dans une image bitmap chargée, je ne sais pas.
FloodFill dans Android
public class FloodFill {
public void floodFill(Bitmap image, Point node, int targetColor,
int replacementColor) {
int width = image.getWidth();
int height = image.getHeight();
int target = targetColor;
int replacement = replacementColor;
if (target != replacement) {
Queue<Point> queue = new LinkedList<Point>();
do {
int x = node.x;
int y = node.y;
while (x > 0 && image.getPixel(x - 1, y) == target) {
x--;
}
boolean spanUp = false;
boolean spanDown = false;
while (x < width && image.getPixel(x, y) == target) {
image.setPixel(x, y, replacement);
if (!spanUp && y > 0 && image.getPixel(x, y - 1) == target) {
queue.add(new Point(x, y - 1));
spanUp = true;
} else if (spanUp && y > 0
&& image.getPixel(x, y - 1) != target) {
spanUp = false;
}
if (!spanDown && y < height - 1
&& image.getPixel(x, y + 1) == target) {
queue.add(new Point(x, y + 1));
spanDown = true;
} else if (spanDown && y < height - 1
&& image.getPixel(x, y + 1) != target) {
spanDown = false;
}
x++;
}
} while ((node = queue.poll()) != null);
}
}
}
Vous devriez utiliser un AsyncTask d'utiliser l'algorithme de floodfill. Utilisation de la même chose sur le thread principal causé une erreur de mémoire. Même si j'utilise l'algorithme floofill, le fait de remplir une grande zone prend plus de temps, ce qui fait que l'application ne répond plus à temps.
Fill the complete canvas but keep the bound fill area as it is like circle, rectangle. Ce lien pourrait vous aider à résoudre votre problème
Wow beau travail ..... +1 pour une bonne réponse –
Je ne pense pas que vous puissiez obtenir un tableau de pixels à partir d'un bitmap et alterner les couleurs vous-même – schwiz
Parlez-vous de retouche d'image? Ou juste un algorithme générique pour un tableau multidimensionnel? –
@alien avez-vous déjà trouvé une solution à ce problème? Si oui, pensez-vous que vous pourriez me donner le code source ou un exemple? – Hades