Klar, ein transparentes BufferedImage so schnell wie möglich
Habe ich ein transparentes BufferedImage mit dem folgenden code erstellt(nicht relevant, wie es erstellt wird, denke ich):
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
Rectangle screen = transformationContext.getScreen();
//Create an image that supports transparent pixels
return gc.createCompatibleImage((int) screen.getWidth(), (int) screen.getHeight(),
Transparency.BITMASK);
Wie lösche ich das Bild(leeres Bild in dem gleichen Zustand, wie es erstellt wurde) in der Schnellste Weg möglich, ohne die Neuerstellung der Bild? Neu das Bild stellt eine Belastung für GC, das anhalten der VM und das einfrieren der UI.
InformationsquelleAutor adrian.tarau | 2010-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bekam es 🙂 verwendet clearRect anstelle der Füllung mit einer transparenten Farbe.
clearRect
sagt, ist veraltet seit 1.1 obwohl es nicht markiert ist (vielleicht, weil Anmerkungen gab es noch nicht?). Der bevorzugte Weg ist jetzt:graphics.setComposite(AlphaComposite.Clear); graphics.fillRect(0, 0, SIZE, SIZE); graphics.setComposite(AlphaComposite.SrcOver);
(vorausgesetzt, SrcOver war der composite, die Sie zuvor verwendet, und ist die Standardeinstellung) Dies ist tatsächlich in der Nähe die Umsetzung derclearRect
.es gibt keine veralteten Tags in den java-doc, so dass ich vermute, es ist immer noch gültig
das ist, was er meint; Anmerkungen. Die javadocs sind automatisch generiert, da die
@Deprecated
annotation nicht im code (hatte es nicht existiert noch), dann war es nicht in den javadocs.InformationsquelleAutor adrian.tarau
Relativ schnell Weg, aber ich weiß nicht, ob es die Schnellste (und ich möchte sehen, wie andere Antworten) ist, um ein anderes Bild, das Sie nie ändern und das ist immer "vollständig gelöscht" /"voll transparent" und dann müssen Sie ein raster-Kopie, sagen Sie, dass Sie mit dem Namen, kopieren Sie KLAR:
Beachten Sie, dass arbeiten mit Grafiken kann sehr schwierig, wenn es um Aufführungen, weil es eine Menge von nicht-sehr-gut-dokumentierten Verhalten. Zum Beispiel Ihre Bilder (sagen die KLAREN) kann werden hardware-beschleunigt, aber Sie würden dann verlieren, hardware-Beschleunigung, sobald Sie verwenden würden, eine verändernde Methode (wie z.B. ein setRgb()) und es beweisen würde sehr schwer zu realisieren, dass Sie gerade verloren der Vorteil der hardware-Beschleunigung.
Ich denke, dass der beste Ort, um infos zum Thema performant BufferedImage wäre in der Java-Spiele-Programmierer und Java-Spiel-API-Programmierer community/Foren.
Btw stellen Sie sicher, dass sowohl dein BufferedImage mit der "compatible" - Modus: TYPE_INT_ARGB kann problemlos auf Windows, aber nicht auf OS X, etc. so dass Sie wollen, erstellen Sie etwas wie:
Ouch die Law-of-Demeter weh tut, Dank Java 😉
InformationsquelleAutor SyntaxT3rr0r