Das Ermitteln von Berührungskoordinaten im ImageView FloodFill-Algorithmus ist nicht genau

9

Ich versuche, einen Fill Flood-Algorithmus zu verwenden, um ein Cube-Malwerkzeug für eine App zu erstellen.

Dies ist der Code des Algorithmus:

%Vor%

}

Dies ist der Teil, wo ich das Touch-Ereignis in meinem ImageView behandle:

%Vor%

Das Problem ist, dass die Koordinaten nicht genau sind. Ich meine, wo immer ich das Bild berühre, wird es in einem anderen Teil gemalt, in dem ich es nicht habe.

Muss ich meine Ereigniskoordinaten behandeln, bevor ich sie an den Filler-Algorithmus sende? Ich habe auch ein Vollbild probiert und das passiert immer.

Jede Hilfe ist willkommen!

    
Nacho Ramos Sánchez 13.01.2017, 22:10
quelle

1 Antwort

2

Ihre Situation hat mich daran erinnert, dass dieser Blog-Beitrag so gut wie möglich ist sei das gleiche Problem, das er dort behoben hat. Er musste die Transformation berücksichtigen, die das Bitmap durchlaufen hat, bevor es in ImageView eingefügt wurde.

Anstatt nur getX() und getY() für das Ereignis in seinem OnTouchListener zu verwenden, verwendete er getPointerCoords(event)[0] bzw. getPointerCoords(event)[1] und erstellte diese Methode:

%Vor%

Beachten Sie, dass dies eine Lösung für Sie ist - Sie können die getImageMatrix() -Methode für Ihre imagen -Variable in der Methode verwenden oder die Matrix in einer endgültigen Variablen speichern und in OnTouchListener verwenden.

Beachten Sie auch, dass, wenn das das Problem war, Sie die Umwandlung auch berücksichtigen sollten, wenn Sie FillFlood einrichten, um die Dimensionen entsprechend zu konstruieren (das würde bedeuten, dass Ihr vorheriger Versuch zu einer zu großen / kleinen Matrix im Vergleich zu die ursprüngliche Bitmap).

Und alles in einem für Sie (eine Möglichkeit, diese Lösung zu verwenden):

%Vor%

Hoffe, dass es das löst.

    
et_l 18.01.2017, 08:42
quelle