Foros del Web » Programación para mayores de 30 ;) » Java »

No se guarda archivo de imagen

Estas en el tema de No se guarda archivo de imagen en el foro de Java en Foros del Web. Hola a todos. Estoy intentando guardar un grafo dibujado sobre un JPanel, para lo cual utilizo la siguiente función: private void guardarGraficoActionPerformed(java.awt.event.Actio nEvent evt) { ...
  #1 (permalink)  
Antiguo 27/12/2006, 06:08
 
Fecha de Ingreso: diciembre-2006
Mensajes: 7
Antigüedad: 17 años, 4 meses
Puntos: 0
No se guarda archivo de imagen

Hola a todos.

Estoy intentando guardar un grafo dibujado sobre un JPanel, para lo cual utilizo la siguiente función:

private void guardarGraficoActionPerformed(java.awt.event.Actio nEvent evt) {
try {
FileDialog fd = new FileDialog(this, "Guardar grafo como una imagen GIF", FileDialog.SAVE);
fd.setVisible(true);
String name = fd.getFile();
Rectangle r = panel.getBounds();
Image image = panel.createImage(r.width, r.height);
ImageIO.write((RenderedImage)image, "gif", new File(name));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

En principio lo hace todo bien, salvo el hecho de que en realidad no guarda nada, es decir, que no aparece siquiera el archivo donde supuestamente debería aparecer.

¿¿Alguien sabe por qué está pasando esto??

Gracias de antemano.
  #2 (permalink)  
Antiguo 27/12/2006, 06:18
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 3 meses
Puntos: 19
Re: No se guarda archivo de imagen

Por si te vale de algo:
http://club.idecnet.com/~ccastano/femepa/050106.htm
Cita:
//Como guardar una imagen en un fichero De el libro de Jhon Zukowski :
//Programación en Java 2 - Apendice A ( pag 638 )


BufferedImage bi = new BufferedImage(400,200,BufferedImage.TYPE_INT_RGB);

Graphics g = bi.getGraphics();

...

FileOutputStream out = new FileOutputStream(filename);

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

JPEGEncoderParam param = encoder.getDefaultJPEGEncodeParam(bi);

param.setQuality(1.0f, false);

encoder.setJPEGEncodeParam(param);

encoder.encode(bi);
salu2
  #3 (permalink)  
Antiguo 23/01/2007, 11:58
 
Fecha de Ingreso: diciembre-2006
Mensajes: 7
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: No se guarda archivo de imagen

Hola de nuevo.

Gracias por responderme, dogduck. No he podido sacarle partido a tu respuesta aunque lo he intentado.

En cualquier caso acabo de encontrar la respuesta a mi propblema. El fallo estaba, fijaos que tontería, en que solo cogía el nombre del fichero donde quería guardar dicha imagen, por lo que no se me creaba absolutamente nada.


Lo curioso de esto es que ahí no acabaron mis problemas, sino que descubrí que el archivo contenía una imagen en blanco en lugar del grafo deseado. Al parecer el método Image image = panel.createImage(r.width, r.height); solo crea una imagen en blanco cuyo tamaño coincide con el del panel del cual quiero sustraerla. Para guardarla en el fichero debo volver a pintarla de nuevo, con lo que el código me queda así:

private void guardarGraficoActionPerformed(java.awt.event.Actio nEvent evt) {
try {
FileDialog fd = new FileDialog(this, "Guardar grafo como ...", FileDialog.SAVE);

fd.setVisible(true);
String name = fd.getDirectory() + fd.getFile() + ".jpeg";
Dimension d = panel.getSize();
Image image = panel.createImage(d.width, d.height);

// Aquí es donde repointo de nuevo el grafo
Graphics g = image.getGraphics();
int xleft = Math.abs(Pantalla2.raiz.getMinx(0)) + 120;
Pantalla2.raiz.inorder(g, xleft, 10);

ImageIO.write((BufferedImage)image, "jpeg", new File(name));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

Ahora os quería preguntar si alguno sabe como hacer para poder visualizar los archivos en el formato de imagen que quiero que aparezcan en el FileDialog, de modo que el usuario pueda elegir entre ellos el que le parezca mejor.

Un saludo y gracias por adelantado.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:32.