Ich bin nicht in der Lage, eine Floodfill-Algorithmus-Implementierung für Android zu finden.Floodfill-Algorithmus in Android
Gibt es eine Idee, ob in Android eine Floodfill-API verfügbar ist, und wenn nicht, gibt es noch eine andere Alternative?
Ich bin nicht in der Lage, eine Floodfill-Algorithmus-Implementierung für Android zu finden.Floodfill-Algorithmus in Android
Gibt es eine Idee, ob in Android eine Floodfill-API verfügbar ist, und wenn nicht, gibt es noch eine andere Alternative?
Haben Sie eine Definition der Form?
Wenn ja, werfen Sie einen Blick auf die Canvas docs. Sie können eine Region füllen, indem Sie einen Clipbereich definieren und dann canvas.drawColor aufrufen.
Raute Beispiel:
Rect r = new Rect(0,0,300,300);
canvas.clipRect(r); // see also clipRegion
canvas.drawColor(Color.RED);
Es gibt mehr Clips-Funktionen, so dass Sie in der Lage sein sollten, zu bauen, was Sie zu füllen versuchen.
Auf der anderen Seite, wenn Sie eine Region in einer geladenen Bitmap überfluten möchten, dann weiß ich nicht.
FloodFill in 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);
}
}
}
sollten Sie einen AsyncTask verwenden, um die Floodfill Algorithmus zu verwenden. Die Verwendung desselben im Haupt-Thread verursachte einen Speicherfehler. Selbst wenn ich den Floofill-Algorithmus verwende, dauert es manchmal länger, einen großen Bereich zu füllen, was dazu führt, dass die Anwendung nicht mehr reagiert.
Fill the complete canvas but keep the bound fill area as it is like circle, rectangle. Dieser Link könnte Ihr Problem lösen
Wow schöne Arbeit ..... +1 für eine gute Antwort –
Ich glaube nicht, dass Sie ein Pixel-Array von einem Bitmap und alternativen Farben selbst erhalten können – schwiz
Sprechen Sie über Bildbearbeitung? Oder nur ein generischer Algorithmus für ein mehrdimensionales Array? –
@alien hast du jemals eine lösung dafür gefunden? Wenn ja, könntest du mir den Quellcode oder ein Beispiel geben? – Hades