Graphics to png

Nortix

Mitglied
Hallo,
ich zeichne auf einem JPanel beim Erstellen mittels paintComponent() ein Koordinatensystem. Danach kann ich mit einer Eingabemaske Vektoren auf dem Koordinatensystem zeichnen.
Dieses Bild soll mittels einer Funktion abgespeichert werden. Mein Problem ist nun, dass zwar das Koordinatensystem richtig abgespeichert wird, aber die darauf gezeichneten Vektoren nicht vorhanden sind - als hätte ich sie nie gezeichnet.

Muss ich nach jedem Zeichnen das momentane Graphicsobjekt abspeichern? Andere Lösungsvorschläge?

Hier mal der Code zum abspeichern:

Java:
BufferedImage image = getSnapShot(koordinatensystem);
try{
     ImageIO.write(image, "png", new File("test.png"));
}
catch (IOException ex){}
 

Kevin94

Top Contributor
Ich würde sagen, die Vektoren werden einfach nicht gezeichnet. Am Speichern liegt es garantiert nicht. Wenn die Vektoren auf das Bild gezeichnet wurden, werden sie auch mit abgespeichert. Die Schlussfolgerung daraus muss also sein, dass der Fehler beim erstellen des Images liegt.
 

Nortix

Mitglied
Sorry, vielleicht habe ich mich etwas undeutlich ausgedrückt.
Die Vektoren sind einfache Linien und werden mittels g2d.draw(shape) gezeichnet und auch auf dem Panel angezeigt - nur nicht beim Erstellen des Images.

Das ein Fehler besteht, weiß ich ja, habe leider nur keine Ideen mehr für eine Problemlösung.
 

Kevin94

Top Contributor
Und wie wird das Bild gezeichnet?

Der Fehler steckt definitv nicht im geposteten Code, sondern entweder in getSnapShot oder paintComponent (oder in anderen Methoden, von denen ich nichts weis). Ein bisschen mehr Code wäre nützlich.
 

Nortix

Mitglied
Mein Fehler! Ganz vergessen.

Java:
public BufferedImage getSnapShot(JPanel view){
        int w = view.getWidth();
        int h = view.getHeight();
 
        BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
        synchronized (view.getTreeLock()){
            view.paint(image.createGraphics());
        }
        return image;
  }


Koordinatensystem.paintComponent(Graphics g):
Java:
public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLACK);
        g.drawLine(350, 0, 350, 700);
        g.drawLine(0,350,700,350);

        // ... weitere g.drawLine Anweisungen für mehr Beschriftungen.

Koordinatensystem.geradeXY(double x, double y):
Java:
public void geradeXY(double x, double y)
    {
        //zeichnet einen Vektor bzw Strahl mit den angegebenen Werten in das Koordinatensystem
        Graphics g = this.getGraphics();
        x*=zoomX; //zoomX ist der Umrechnungsfaktor passend zur Größe des Koordinatensystems für die X-Achse
        y*=zoomY;
        
        y*=-1;
        
        x+=350;
        y+=350;
        
        Graphics2D g2d = (Graphics2D) g;
        Shape shape = new Line2D.Double(350, 350, x, y);
        g2d.draw(shape);
  
    }

Das müsste der ganze Code sein, der dafür wichtig ist.
 

Kevin94

Top Contributor
Hab ich schon fast erwartet. getGraphics ist eine Methode die auf totale Irrwege führt und nicht verwendet werden sollte. Du musst die Koordinaten der Vektoren irgenwie zwischenspeichern und dann in paintComponent die Vektoren zeichnen. Ich nehme an, dass die Vektoren auch verschwinden, wenn man die Fenstergröße ändert.
 

Nortix

Mitglied
Hallo,
danke für den Tipp.
Die Fenstergröße ist fest vorgegeben und deswegen kann ich das nicht nachverfolgen.

Heißt so viel wie, dass ich meine Methode "geradeXY(double x, double y)" in paintComponent einbinden muss und diese dann immer aufrufen, wenn ich einen Vektor zeichnen will?
 

Kevin94

Top Contributor
Nein hesit soviel, wie: Du brauchst eine Instanzvariable ( z.B. List<Point> da deine Vektoren ja alle den selben Ursprung haben oder List<MyVektorClass> wenn es individueller wird) und in der paintComponent itterierst du dann darüber und zeichnest nacheinander alle Vektoren. In geradeXY passiert dann nichts anderes als das Hinzufügen eines neuen Objekts zu dieser Liste und dem Aufruf von repaint().

PS: Der Effekt das die Vektoren verschwinden dürfte auch auftreten, wenn du das Fenster minimierst und dann wieder maximierst oder ein anderes Fenster drüberziehts.
 

Nortix

Mitglied
Hallo,
es hat endlich geklappt! Danke für die aufgebrachte Mühe.

Ich hatte in meiner Gui eine Liste mit den Vektoren. Die habe ich in das Koordinatensystem ausgelagert, die dort beim Aufruf von paintComponent() gezeichnet werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
J Erste Schritte drawLine Methode der Graphics Klasse Java Basics - Anfänger-Themen 2
J GUI / Graphics Java Basics - Anfänger-Themen 2
H Graphics / repaint Java Basics - Anfänger-Themen 8
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Cast java.awt.Graphics Java Basics - Anfänger-Themen 7
Azazel (Anfängerhilfe) awt.Graphics Schwierigkeiten Java Basics - Anfänger-Themen 6
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
S Farbige Lebensleiste mit Graphics? Java Basics - Anfänger-Themen 10
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S G Graphics Java Basics - Anfänger-Themen 1
thet1983 g.Graphics löschen? Java Basics - Anfänger-Themen 1
M Probleme mit paint() aus java.awt.Graphics Java Basics - Anfänger-Themen 2
A EAN13 Font auf graphics g erzeugt Monospaces Java Basics - Anfänger-Themen 14
N Methode draw(Graphics g) aufrufen Java Basics - Anfänger-Themen 6
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13
J Problem mit paint(Graphics g) Java Basics - Anfänger-Themen 4
J Jtable änderung soll graphics aktualisieren Java Basics - Anfänger-Themen 4
J JAVA Graphics Java Basics - Anfänger-Themen 5
A Graphics Objekt verhält sich merkwürdig Java Basics - Anfänger-Themen 2
G DRUCKEN von z.B. eines JFrame über print(Graphics g) Java Basics - Anfänger-Themen 9
Maxim6394 Probleme mit Graphics Java Basics - Anfänger-Themen 7
W von Graphics in BufferedImage Java Basics - Anfänger-Themen 10
M OOP Graphics immer selbstbezihend Java Basics - Anfänger-Themen 12
K Problem mit Parameter von paint(Graphics g) Java Basics - Anfänger-Themen 3
T Transparente Bilder mit Graphics zeichnen Java Basics - Anfänger-Themen 17
H Probleme mit Graphics G Java Basics - Anfänger-Themen 2
M Schiebepuzzle: MouseListener und Graphics? Java Basics - Anfänger-Themen 6
J Graphics g Java Basics - Anfänger-Themen 4
H Probleme mit Graphics Java Basics - Anfänger-Themen 5
B MouseListener & Graphics Java Basics - Anfänger-Themen 10
M Graphics zeichnen Java Basics - Anfänger-Themen 2
F Graphics PDFBox Java Basics - Anfänger-Themen 9
M kurze Frage zu Graphics Java Basics - Anfänger-Themen 5
Luk10 Buch für Swing/Awt/Graphics Java Basics - Anfänger-Themen 4
M Java Graphics etc. Java Basics - Anfänger-Themen 2
M Concurrency und Graphics Java Basics - Anfänger-Themen 9
F Was ist Graphics g wirklich? Java Basics - Anfänger-Themen 5
J Klasse Graphics Nullpointerexception Java Basics - Anfänger-Themen 8
P Frage zu Graphics Java Basics - Anfänger-Themen 2
O graphics methode zeigt mein bild nicht an Java Basics - Anfänger-Themen 7
F Zweite Graphics-Methode wird nicht ausgeführt Java Basics - Anfänger-Themen 4
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
G paintComponent(Graphics g) Java Basics - Anfänger-Themen 2
eQui Oberfläche mit Graphics zeichnen Java Basics - Anfänger-Themen 11
S Dicke bei Graphics Ovject einstellen Java Basics - Anfänger-Themen 2
V KSKB zum Verständnis von Graphics und paintComponent Java Basics - Anfänger-Themen 6
G mit Graphics erzeugte Strings verschwinden sofort wieder Java Basics - Anfänger-Themen 7
T Graphics von java.awt.Frame soll sich inhalt merken Java Basics - Anfänger-Themen 3
G Graphics-Object skalieren Java Basics - Anfänger-Themen 9
G Constructor & Graphics g Java Basics - Anfänger-Themen 5
F Frage zum Graphics Objekt Java Basics - Anfänger-Themen 3
D Instanz von Graphics in run() Java Basics - Anfänger-Themen 8
B Mouseevents und Graphics Java Basics - Anfänger-Themen 11
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
W Verständisfrage zu Graphics Objekt Java Basics - Anfänger-Themen 3
P umwandeln von graphics nach image Java Basics - Anfänger-Themen 4
A Graphics g, AdjustmentEvent e Java Basics - Anfänger-Themen 5
Dilandau paint(Graphics g) { unbekannt in try{} / catch{} }? Java Basics - Anfänger-Themen 5
S Graphics Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben