3 Stimmen

Kombinieren Sie mehrere Bilder zu einem einzigen Bild für spätere Malerei, mit Alpha-Blending

Ich habe ein Grafiksystem für Java, mit dem Objekte "tapeziert" werden können, indem mehrere Bilder angegeben werden, auf die (relativ) komplexe Ausrichtungs- und Größenänderungsoptionen angewendet werden können.

Um eine angemessene Leistung zu erzielen (vor allem auf Geräten mit sehr geringer Leistung), führe ich das Malen des Bildes in ein internes Bild aus, wenn das Hintergrundbild zum ersten Mal gemalt wird, und kopiere dann dieses zusammengesetzte Bild in den Zielgrafikkontext, um es auf den Bildschirm zu bringen. Das zusammengesetzte Bild wird nur dann neu erstellt, wenn die Größe des Objekts geändert wird, so dass die einzige Arbeit für nachfolgende Neufärbungen darin besteht, den abgeschnittenen Bereich aus dem zusammengesetzten Bild in den Zielgrafikkontext zu kopieren.

Die Lösung funktioniert wirklich gut, außer dass bei PNG-Bildern mit Alphakanal-Transparenz der Alphakanal beim Malen des Composites verloren geht - d.h. das Composite hat alle Pixel komplett undurchsichtig. Beim anschließenden Kopieren in den Grafikkontext auf dem Bildschirm kommt also nicht durch, was sich hinter dem tapezierten Objekt befindet.

Ich habe es geschafft, einen RGBImageFilter zu verwenden, um vollständig transparente Pixel herauszufiltern, aber ich sehe keine Lösung, um die überblendete Transparenz zum Laufen zu bringen.

Kennt jemand eine Möglichkeit, die Bilder mit intaktem Alphakanal zu malen und zu kombinieren, wenn sich zwei Pixel mit Alphawerten überschneiden?

3voto

Savvas Dalkitsis Punkte 11241

Welche Art von Bild verwenden Sie für das zusammengesetzte Bild?

Sie sollten ein BufferedImage verwenden und dessen Typ auf TYPE_INT_ARGB setzen, was die Durchsichtigkeit ermöglicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X