frage zu BufferedImage

Y

yyannekk

Gast
ich bin mehr oder weniger java anfänger bis fortgeschrittener habe aber kaum erfahrung mit grafischen sachen. ich habe mithilfe eines tutorials und mit meinem vorwissen ein spiel programmiert was auch ohne probleme funktioniert.
Ich habe eine GUI klasse geschrieben die von Canvas erbt. in dieser verwende ich dieses bufferedimage konzept. zB initialisiere ich den buffer mit
Java:
createBufferStrategy(2);
_strategy = getBufferStrategy();
später bemale ich dann die oberfläche zB mit
Java:
g = (Graphics2D) _strategy.getDrawGraphics();
....
g.dispose();
_strategy.show();
nach und nach wird so die Oberfläche bemalt. wie komme ich jetzt an das gemalte bild als solches ran?
also ich brauche das bild als objekt.
hoffe meine frage ist verständlich genug.
soll ich noch mehr von der klasse posten?
mfg yyannekk
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Hm - das mit der bufferStrategy und so ist eigentlich schon "advanced", aber... egal. Du kannt ein BufferedImage erstellen, und in dessen Graphics reinzeichnen

BufferedImage bi = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
drawStuffInto(g);
g.dispose();

Das 'bi' kann man dann z.B. woanders hinmalen, als JPG speichern, oder oder oder
 
Y

yyannekk

Gast
ja ok. also das bild ist meine grafische oberfläche, wie lass ich mir das jetzt anzeigen?
bisher hatte ich das immer g.dispose() und dann getBufferstrategy.show() gelöst.
wie mache ich das jetzt? wie gesagt ich hab kein plan von gui sachen
 

Marco13

Top Contributor
Man kann das Bild grundsätzlich wieder mit
graphicsAusDerBufferStragegy.drawImage(bi,0,0,null);
graphicsAusDerBufferStragegy.dispose();
auf den Bildschirm bringen. Aber es klingt ein bißchen befremdlich. Hat die Verwendung der eigenen BufferStrategy einen bestimmten Grund? Mehr Kontext wäre hilfreich.
 
Y

yyannekk

Gast
also ich bau achtung die kurve nach
also im prinziep ein snake multiplayer spiel wobei die "schlangen" kurven fahren und ab und zu löcher machen.

ich möchte also ein bild nach und nach bemalen und es soll alle 50 ms auf den bildschirm gebracht werden.
das ich jetzt erst dass bufferedimage bemale und dann in die bufferstrategy kopier erscheint mir auch doppelt gemoppelt
kann ich nicht einfach das bufferedimage ohne die bufferstrategy zu verwenden wieder auf den bildschirm bringen?
 

Marco13

Top Contributor
Mir ist nicht klar, warum du überhaupt eine BufferStrategy verwendest. Im einfachsten Fall zeichnet man in der überschriebenen paintComponent-Methode eines JPanels. Je nachdem, wie die "schlange" (oder was man da steuert) repräsentiert ist, kann es mehr oder weniger sinnvoll sein, das noch in einem BufferedImage zwischenzuspeichern (vom Bauchgefühl her: Eher weniger - aber beschreib' ggf. mal genauer, wie du das im Moment machst)
 
Y

yyannekk

Gast
also ich poste mal wesentliche teile der gui klasse. vor allem an der methode zeichneFrame() (ganz unten) sieht man wie gemalt wird. hier wird von jedem spieler eine menge mit punkten geholt (punkte ist ziemlich genau wie die klasse Point hat hier also 2 koordinaten x und y) die dann alle einzeln bemalt werden.
ich bemale insgesamt das bild nur mit der methode g.fillrect()
die methode zeichneFrame wird alle 50ms aufgerufen
hilft das zum verständnis weiter?

Java:
public class INTERFACE extends Canvas implements KeyListener, MouseListener
{
    private static final long serialVersionUID = 1L;
    static int                _x;
    static int                _y;
    static int                _c;
    static Font               fontMenue;
    static Font               fontSpiel;
    static Font               fontKlein;
    static BufferStrategy     _strategy;
    static Graphics2D         g;
    static Dimension          dim              = Toolkit.getDefaultToolkit().getScreenSize();
    static HashSet<Punkt>     _punkteToRepaint = new HashSet<Punkt>();
    static HashSet<Point>     _pointsToRepaint = new HashSet<Point>();
    static BufferedImage      _bimage;

    public INTERFACE()
    {
        setUpGraphics();
        requestFocus();
        addKeyListener(this);
        addMouseListener(this);
    }

    private void setUpGraphics()
    {
        _x = dim.width;
        _y = dim.height;
        int menue = _x * _y / 50000;
        int spiel = _x * _y / 20000;
        int klein = _x * _y / 96000;
        int k = _x * _y;
        _c = k / 19200;
        fontMenue = new Font("Sans Serif", 0, menue);
        fontSpiel = new Font("Sans Serif", 0, spiel);
        fontKlein = new Font("Sans Serif", 0, klein);

        JFrame container = new JFrame("Achtung, die Kurve");
        container.setCursor(getToolkit().createCustomCursor(new ImageIcon("").getImage(), new Point(0, 0), "No Cursor"));

        JPanel panel = (JPanel) container.getContentPane();
        panel.setPreferredSize(new Dimension(_x, _y));
        panel.setBackground(Color.BLACK);
        panel.setLayout(null);

        setBounds(0, 0, _x, _y);
        panel.add(this);
        container.setUndecorated(true);
        setIgnoreRepaint(true);
        container.pack();
        container.setResizable(false);
        container.setVisible(true);

        createBufferStrategy(2);
        _strategy = getBufferStrategy();
    }

    static void zeichne(Point a, Color c)
    {
        g = (Graphics2D) _strategy.getDrawGraphics();
        g.setColor(c);
        g.fillRect(a.x, a.y, 1, 1);
        g.dispose();
        _strategy.show();
    }

    private static void ueberZeichnen()
    {
        g = (Graphics2D) _strategy.getDrawGraphics();
        ArrayList<Point> loeschen = new ArrayList<Point>();
        for (Point p : _pointsToRepaint)
        {
            try
            {
                g.setColor(SPIELFELD.gibFarbeAn(p.x, p.y));
                g.setColor(Color.black);
                g.fillRect(p.x, p.y, 1, 1);
                loeschen.add(p);
            }
            catch (Exception e)
            {
                loeschen.add(p);
            }
        }
        _pointsToRepaint.removeAll(loeschen);
    }

    static void zeichneIntro()
    {
        g = (Graphics2D) _strategy.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0, 0, _x, _y);
        g.dispose();
        _strategy.show();
        sleep(500);

        for (Spieler s : Spiel._spieler)
        {
            g = (Graphics2D) _strategy.getDrawGraphics();

            g.setColor(s.gibFarbe());
            for (Punkt p : s.gibPlatz())
            {
                g.fillRect(p.x, p.y, 1, 1);
            }
            g.dispose();
            _strategy.show();
            sleep(600);
        }
    }

    static void zeichneGlowEffekt(Spieler s)
    {
        int groeße1 = 12;
        int groeße2 = 9;
        int helligkeit = 2;
        g.setColor(new Color(s.gibFarbe().getRed(), s.gibFarbe().getGreen(), s.gibFarbe().getBlue(), (int) (helligkeit * 6)));

        g.fillRect((int) s._x - groeße1, (int) s._y - groeße1, groeße1 * 2 + 1, groeße1 * 2 + 1);

        g.setColor(new Color(s.gibFarbe().getRed(), s.gibFarbe().getGreen(), s.gibFarbe().getBlue(), (int) (helligkeit * 8)));
        g.fillRect((int) s._x - groeße2, (int) s._y - groeße2, groeße2 * 2 + 1, groeße2 * 2 + 1);
    }

    public static void zeichneFrame()
    {
        ueberZeichnen();
        g = (Graphics2D) _strategy.getDrawGraphics();
        for (Spieler s : Spiel._spieler)
        {
            g.setColor(s.gibFarbe());
            if (s.springt())
            {
                for (Punkt p : s.gibPlatz())
                {
                    g.fillRect(p.x, p.y, 1, 1);
                    _pointsToRepaint.add(new Point(p.x, p.y));
                }
            }
            else
            {
                for (Punkt p : s.gibPlatz())
                {
                    g.fillRect(p.x, p.y, 1, 1);
                }
                if (s.lebt())
                {
                    zeichneGlowEffekt(s);
                }
            }

        }
        g.dispose();
        _strategy.show();
    }
}
 
Y

yyannekk

Gast
moment also wie mache ich das mit der paintcomponent methode vom jpanel? ok das les ich mir mal an^^ danke für die hilfe
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
C Frage zu ActionListenern AWT, Swing, JavaFX & SWT 7
D Frage @ someActionEvent.getActionCommand() AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben