Frage

Ich habe einen transparenten Bufferedimage mit dem folgenden Code (ich denke nicht, wie er erstellt wird):

            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 im selben Zustand wie es geschaffen wurde) auf die schnellste Weise möglich, ohne das Bild neu zu erstellen? Das Erstellen des Bildes belastet GC, die VM pausiert und die Benutzeroberfläche einfriert.

War es hilfreich?

Lösung

Habe es bekommen :) verwendet ClearRect anstatt mit einer transparenten Farbe zu füllen.

            graphics = (Graphics2D) offlineBuffer.getGraphics();
            graphics.setBackground(new Color(255, 255, 255, 0));
            Rectangle screen = transformationContext.getScreen();
            graphics.clearRect(0,0, (int)screen.getWidth(), (int)screen.getHeight());

Andere Tipps

Ein relativ schneller Weg, aber ich weiß nicht, ob es am schnellsten ist (und ich würde gerne andere Antworten sehen), ist ein anderes Bild, das Sie nie ändern, und das ist immer "vollständig gelöscht" / "vollständig transparent" und dann Sie machen eine Rasterkopie, sagen Sie, Sie haben diese Kopie klar benannt:

imageYouWantToClear.setData( CLEAR.getRaster() );

Beachten Sie, dass die Arbeit mit Grafiken in Bezug auf Leistungen sehr schwierig sein kann, da es viele nicht sehr welldokumentierte Verhaltensweisen gibt. Zum Beispiel Ihre Bilder (sagen wir die klare) kann Hardware-Beschleunigung sein, aber Sie würden dann die Hardware-Beschleunigung verlieren, sobald Sie eine Mutationsmethode verwenden (wie sagen a setRGB ()) und es würde sich sehr schwer erweisen zu erkennen, dass Sie gerade den Vorteil der Hardwarebeschleunigung verloren haben.

Ich denke, der beste Ort, um Infos zum Thema Performant BufferedImage zu finden, wäre in den Java-Spielprogrammen und Java Game-API-Programmern Community/Foren.

Übrigens stellen Sie sicher, dass sowohl Ihr BufferedImage den "kompatiblen" Modus verwenden: type_int_argb kann unter Windows in Ordnung sein, aber nicht unter Betriebssystem x usw. Sie möchten sie also erstellen, um so etwas wie zu tun:

GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);

Autsch Der Dämmeterrecht tut weh, danke Java;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top