PDA

View Full Version : paintComponent


terence_81
18-01-2007, 18:22
Salve,

sto programmando con le swing ed ho un disegno fatto con il paintComponent su un pannello. Ora vorrei sapere come posso salvare (tramite un bottone o dal menù che ho già creato) l'immagine disegnata.

PGI-Bis
18-01-2007, 19:00
Dipende da cosa intendi per disegno. Supponiamo che sia un disegno vettoriale, cioè nel paintComponent richiami metodi che disegnano un'immagine a colpi di draw e fill Shape. In questo caso, per salvare l'immagine prima crei un buffer che abbia le stesse dimensioni del componente:

Insets margins = component.getInsets();
int width = component.getWidth() - (margin.left + margin.right);
int height = component.getHeight() - (margin.top + margin.bottom);
BufferedImage buffer =
new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

Poi invochi tu stesso paintComponent passandogli come argomento un Graphics che ricavi dal buffer:

Graphics graphics = buffer.getGraphics();
graphics.translate(-margins.left, -margins.top);
component.paintComponent(graphics);

A questo punto l'immagine "buffer" avrà lo stesso aspetto del tuo disegno. Per salvarla puoi usare ImageIO:

File file = new File("immagine.png");
ImageIO.write(buffer, "png", file);

Se invece disegni su un buffer, ad esempio perchè fai grafica bitmap, allora salvi direttamente quello.