Wie kann ich ein Polygon (das durch eine Sammlung von Punkten angegeben wird) auf Android mit einem PNG-Bild transparent einstellen?
Antwort
Zu viele Anzeigen?Um dies zu erreichen, müssten Sie zunächst eine Referenz auf die Ressource von einer BitmapFactory
erhalten:
Bitmap my_image = BitmapFactory.decodeResource(getResources(), R.drawable.[your_image]);
Dann müssten Sie die Methode setPixels()
verwenden, um den Bereich im PNG zu definieren, der transparent gemacht werden soll. Transparenz wird meiner Meinung nach erreicht, indem man die Pixel Color
auf 0 setzt.
Das Ableiten des Polygons wäre eine Berechnung, die Sie in Ihrer Anwendung durchführen müssten, gefolgt von der Übergabe der Abmessungen des Polygons an die Methode setPixels()
. Sehen Sie sich diesen Link aus den Android-Entwicklerdokumenten an, um eine Vorstellung davon zu erhalten, wie die Methode setPixels()
verwendet wird.
Beachten Sie, dass dies voraussetzt, dass Ihre PNG-Datei veränderbar ist. Andernfalls erhalten Sie einen IllegalStateException
.
Ableitung des Bereichs für ein N-eckiges Polygon
Hier wird Ihr Problem deutlich herausfordernder. Da Sie keine konventionellen Flächenformeln verwenden können (da die Fläche nichts mit diesem Beispiel zu tun hat, sondern vielmehr mit der Position der Eckpunkte), müssen Sie selbst eine Möglichkeit finden, den Bereich zu berechnen, der transparent sein muss.
X hier ist eine willkürlich definierte Pixel-Länge, die entweder erhöht werden kann, um die Genauigkeit zu verbessern, oder verringert werden kann, um die Leistung zu verbessern. Der Prozess des Ableitens dieser Transparenz würde wie folgt aussehen:
- Erhalten Sie den am weitesten links liegenden Wert, der zu einem vom Benutzer gezeichneten Eckpunkt gehört;
- Gehen Sie das Bild nach unten (indem Sie den Wert von
Y
in der MethodegetPixel()
verringern, bis Sie auf einen anderen vom Benutzer gezeichneten Eckpunkt treffen, und ändern Sie die Pixel der Reihe nach transparent, während Sie mitsetPixel()
Ihre aktuellen Koordinaten übergeben; - Wenn Sie mit einem anderen Eckpunkt kollidieren, hören Sie auf, die Transparenz der Pixel zu ändern, aber fahren Sie fort, die Spalte hinunter zu durchsuchen;
- Wenn Sie erneut auf einen Eckpunkt stoßen, beginnen Sie damit, die folgenden Pixel als transparent zu markieren;
- Wiederholen Sie dies, bis Sie zum unteren Rand des Bildes gelangen;
- Erhöhen Sie den X-Wert um das von Ihnen vordefinierte konstante X und wiederholen Sie dies in der nächsten Spalte.
Es ist wichtig, dass Sie zwischen dem Setzen der Transparenz und dem Nicht-Setzen der Transparenz umschalten (Sie könnten ein boolean
verwenden, um den Zustand beizubehalten), da es möglich ist, dass Polygone "sich um die Ecke legen" und in die Spalte zurückkehren, die Sie durchsuchen.