Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Java - Grafikkontext in Datei speichern

Jürgen124 / 3 Antworten / Baumansicht Nickles

Hallo, wie kann ich einen Grafikkontext in eine Datei speichern. Der folgenden Code lädt eine Grafik und speichert sie wieder. Zwischen durch wird ein Text im Grafikkontext in die Grafik eingefpügt. Wie kann ich diesen Grafikkontext speichern? Also das veränderte Bild?

import java.awt.*;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

public class ImgShowComponent extends Canvas
{
private BufferedImage img = null;
private String sDID = "";
private BufferedImage outImg;
ImgShowComponent( String sFile , String sID)
{
sDID = sID;
try{
img = ImageIO.read(new File(sFile));
} catch (IOException e) {
e.printStackTrace();
}
try{
ImageIO.write(img, "jpeg", new File("Stempel"+sDID+".jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}

public void paint( Graphics g)
{
// Wie speichert man die veränderte Grafik?
Font myFont = new Font("Arial",Font.PLAIN,25);
g.setFont(myFont);
g.drawImage( img, 0, 0, this );
g.drawString("Dokument"+sDID,30,30);
g.dispose();
}
public Dimension getPreferredSize()
{
return new Dimension( img.getWidth( this ), img.getHeight( this ) );
}
public Dimension getMinimumSize()
{
return getPreferredSize();
}
}

bei Antwort benachrichtigen
Borlander Jürgen124 „Java - Grafikkontext in Datei speichern“
Optionen

Du zeichnest scheinbar nur auf die Zeichenfläche des Canvas, und das jedesmal wenn die Zeichenfläche aufgefrischt wird. Wenn Du das Ergebnis als Datei speichern willst müsstest Du wohl erstmal ein Bild-Objekt erstellen (keine Ahnung wie die Klasse heißt, ich arbeite normalerweise nie mit AWT und Swing. Wird sicher was in der Richtung Image sein), und dann auf dessen Grafikkontext zeichnen. Anschließend kannst Du das Bitmap dann in einer Datei speichern...

Gruß
Borlander

bei Antwort benachrichtigen
Jürgen124 Borlander „Du zeichnest scheinbar nur auf die Zeichenfläche des Canvas, und das jedesmal...“
Optionen

Ja, das ist schon richtig. Ein im Speicher gehaltenes "BufferedImage" soll dafür vorgesehen sein. Das BufferedImage hat aber keine Methode um einen Text darauf zu schreiben , nur Methoden um einzellne Pixel zu setzen. Andererseits soll man mit buffimg.createGraphics() einen Kontext erzeugen können, den man der paint-Methode übergibt. Das hab ich alles ausprobiert. Der Compiler schluckt das auch aber das was ich in das Canvas zeichne wird einfach nicht gespeichert! Ich glaube die Frage ist
1. Wo erzeuge ich das BufferedImage
2. Wie bring ich paint dazu nicht nur in das Canvas, sondern auch in das BufferedImage zu schreiben.

Gruß Jürgen

bei Antwort benachrichtigen
Borlander Jürgen124 „Ja, das ist schon richtig. Ein im Speicher gehaltenes BufferedImage soll dafür...“
Optionen
1. Wo erzeuge ich das BufferedImage
Da kann ich nur auf die API-Referenz verweisen. Für solche Sachen gibt es meist ein Beispiel in der JavaDoc...

2. Wie bring ich paint dazu nicht nur in das Canvas, sondern auch in das BufferedImage zu schreiben.
Ins Bild zeichnen, in der Paint-Methode dann das Bild auf dem Canvas ausgeben.


Gruß
Borlander
bei Antwort benachrichtigen