Zum Inhalt springen

Graphics 2d - Bildverformung


Devilmarkus

Empfohlene Beiträge

Hallo Zusammen,

ich befasse mich momentan mit der Emulation der CRT Bildröhre.

Dazu verwende ich JOGL und pinsel das Bild auf eine riesige Kugel mit einer Texturgrösse von 1024x1024 Pixeln.

(Die eigentliche Bild-Source ist allerdings nur 768x544 Pixel gross)

Nun würde ich gerne wissen, ob man mit Graphics2D auch solch ein Bild derartig verzerren kann:

crt_emulated_thumb.png

(Zum Vergrössern draufklicken)

JOGL ist zwar ganz nett, allerdings bin ich mit der Framerate noch sehr unzufrieden, die bei ~20-30 fps herumdümpelt... (50 sollen es sein)

Gibt es also eine Routine, mit der man ein Bild so "abrunden" kann?

Achtung! Die Ecken müssen nicht abgerundet werden! Das ist hier eine draufgezeichnete Maske! Normal laufen die Ecken auch spitz zusammen.

Bearbeitet von Devilmarkus
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja das OpenGL sicherlich.

Das "Textur-Updaten" 50x pro Sekunde nur leider nicht...

Im BufferedImage kann ich pixels[] verwenden, um so schnell Bildbereiche zu füllen.

In der Textur leider nicht.

Da muss ich leider jedesmal "DrawImage(image,x,y,w,h);" verwenden, was wesentlich langsamer ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nun, ich habe die Routine "Texture zeichnen" auch auf pixels[] umgestellt.

Das geht etwas schneller, als g.DrawImage.

    public void update(final int[] sourcepixels, final boolean usemask) {

        if (!ispainted) {

            if (DEBUG) {

                System.out.println("skipping " + frame++);

            }

            Display.painted = true;

            return;

        }

        ispainted = false;

        SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                try{

                frame = 0;

                imageoffset = startoff;

                for (y = 0; y < (halfsize ? 272 : 544); y++) {

                    System.arraycopy(sourcepixels, 768 * y * (halfsize ? 2 : 1), pixels, imageoffset, 768);

                    imageoffset += (texsizeX);

                }

                raster.setDataElements(0, 0, texsizeX, texsizeY, pixels);

                imagecomponent.set(display);

                } catch (Exception e){}

                ispainted = true;

                Display.painted = true;

            }

        });

    }

InvokeLater, damit wird es "smoother".

Ist aber immernoch nicht das Gelbe vom Ei. Bei der kleinen Texturgrösse (1024x512) habe ich locker 50fps, allerdings fehlen hier ein paar Details.

Bei der Grossen habe ich ~40fps.

"Skipped frames" habe ich übrigens keine!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...