Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Export JPanel Graphics to .png or .gif or .jpg

I'm trying to develop some sort of paint using Java.

I have a JComponent that is located inside of a JPanel.

I already can draw lines and rectangles into that JComponent.

Now, how can I export this drawings as an image (png, gif, jpg)?

I tried this:

BufferedImage b = new BufferedImage(1700,1100,BufferedImage.TYPE_INT_RGB);
this.print(getGraphics());
try{ImageIO.write(b,"png",new File("test.png"));}catch (Exception e) {}

But that only creates a .png file all black.

Help!!!

RESOLVED!!!

BufferedImage bi = new BufferedImage(this.getSize().width, this.getSize().height, BufferedImage.TYPE_INT_ARGB); 
Graphics g = bi.createGraphics();
this.paint(g);  //this == JComponent
g.dispose();
try{ImageIO.write(bi,"png",new File("test.png"));}catch (Exception e) {}
like image 819
tiiin4 Avatar asked Apr 13 '11 21:04

tiiin4


People also ask

How do I save an image from a JPanel?

Create BufferedImage to store your painting. When you paint, paint on BufferedImage. When you need to display paint on JPanel, draw BufferedImage on JPanel. This way, you can load / save painting to file.

Can you add image to JPanel?

To add an image to JPanel, the Java Swing framework provides built-in classes such as ImageIO and ImageIcon that you can use to fetch an image.


1 Answers

First of all, print() is the incorrect method. What I guess should work (haven't tested it yet) is: get the BufferedImage's Graphics (b.createGraphics()) and use that graphics object to paint() your panel/component.

(e.g. yourPanel.paint(b.createGraphics());)

like image 190
Tedil Avatar answered Oct 01 '22 15:10

Tedil