PDA

View Full Version : [Java]Generare file JPG


:.Blizzard.:
18-03-2009, 17:35
Mi spiego meglio:

stò creando un applicativo client server e dal lato server devo disegnare grafici di alcune semplici funzioni per poi ripassare il risultato al client. Aldilà del passaggio dati (stò usando SOAP), volevo sapere se era possibile all'interno del server salvare in formato JPG l'immagine contenuta in un JPanel.

MadJackal
18-03-2009, 17:41
Mi spiego meglio:

stò creando un applicativo client server e dal lato server devo disegnare grafici di alcune semplici funzioni per poi ripassare il risultato al client. Aldilà del passaggio dati (stò usando SOAP), volevo sapere se era possibile all'interno del server salvare in formato JPG l'immagine contenuta in un JPanel.

Intendi generarla? :confused:

PGI-Bis
18-03-2009, 19:38
Se il server è headless non puoi creare un JPanel.

Comunque è possibile "stampare" un JPanel su un'immagine ed è anche piuttosto semplice.

Tutti i componenti Swing hanno un metodo print che richiede come argomento un java.awt.Graphics.

Graphics che puoi ottenere da un'immagine.

JPanel panel = ...
BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB);
panel.printAll(image.getGraphics());

Da image a jpeg il passo è breve. javax.imageio.ImageIO:

ByteArrayOutputStream jpegdata = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", jpegdata);

Nota che se non puoi creare il JPanel puoi sempre disegnare la funzione direttamente sull'immagine, sempre passando per il suo Graphics.

BufferedImage image = new BufferedImage(larghezza, altezza, BufferedImage.TYPE_INT_RGB); //INT_RGB = niente canale alpha
Graphics2D graphics = image.createGraphics();
graphics.setColor(...
graphics.drawLine...fil, draw... ci fai tutto quello che vuoi
e quel "tutto" finisce in image.

:.Blizzard.:
06-04-2009, 16:17
eccomi di nuovo qui!

allora ... ho optato per salvare su un file BMP, solo che non sò perchè ma ho lo sfondo sempre nero e il resto dell'immagine disegnata correttamente:


image = new BufferedImage(larghezza, altezza, BufferedImage.TYPE_INT_RGB);
graphics = image.createGraphics();

[ ... comandi per disegnare ...]

try {
ImageIO.write(image, "bmp", new File("c:/prova.bmp"));

} catch (IOException ex) {
Logger.getLogger(Immagine.class.getName()).log(Level.SEVERE, null, ex);
}


Il bello è che sia usando


graphics.setBackground(Color.white);


che


graphics.setColor(Color.WHITE);
graphics.drawRect(0,0, larghezza, altezza);


ottengo sempre questo risultato:

http://img259.imageshack.us/img259/9897/testd.jpg

Potete aiutarmi?

PGI-Bis
06-04-2009, 19:19
g.fillRect

"drawRect" disegna solo il contorno del rettangolo.

:.Blizzard.:
06-04-2009, 20:08
oddio che svista -_-