[ Foro de Java ]
Estoy tratando de cargar una imagen en un programa escrito por mí, el cual he corrido muchas veces cargando y procesando imágenes jpg, png, pdf (una por cada corrida) sin problema, hasta hoy, que me arroja el siguiente mensaje:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.desktop/java.awt.image.DataBufferInt.<init>(DataBufferInt.java:75)
at java.desktop/java.awt.image.Raster.createPackedRaster(Raster.java:539)
at java.desktop/java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1032)
at java.desktop/java.awt.image.BufferedImage.<init>(BufferedImage.java:324)
at matrizbizarra.transformador.pintar(transformador.java:312)
at matrizbizarra.transformador.main(transformador.java:473)
BUILD SUCCESSFUL (total time: 44 minutes 41 seconds)
Aparentemente es por el tamaño de la imagen, aunque es una imagen pequeña de 4428*1109 pixeles y 2,6MB, el código correspondiente es:
JPanel panel2 = new JPanel();
panel2.setLayout(new BorderLayout());
JPanel imagenoriginal = new JPanel();
imagenoriginal.setPreferredSize(new Dimension(15000, 15000));
setBackground(Color.white);
//imagenoriginal.add( new JLabel( "imagenoriginal" ) );
// Cargamos el gráfico, o imagen , en la panatalla
File img = new File("D:\\Users\\Victor\\Documents\\murales\\ARENA DEL RIO\\piso derecha con autor 2.png");
try {
buffer = ImageIO.read(img);
} catch (IOException ex) {
throw new RuntimeException("Could not open file: " + img);
//Logger.getLogger(transformador.class.getName()).log(Level.SEVERE, null, ex);
}
if (buffer == null) {
throw new RuntimeException("Invalid image file: " + img);
}
ancho = (buffer.getWidth() / resol);
alto = (buffer.getHeight() / resol);
System.out.println("anchoimagenorig=" + ancho + " pixeles =" + (ancho * resol));
System.out.println("altoimagenorig=" + alto + " pixeles =" + (alto * resol));
//resultsSet.close();
ImageIcon imagenP3 = new ImageIcon(buffer);
JLabel etiqP3 = new JLabel(imagenP3);
imagenoriginal.add(etiqP3);
JScrollPane scrollpane = new JScrollPane(imagenoriginal);
panel2.add(scrollpane, BorderLayout.CENTER);
// panel2.add( new JLabel( "bottom panel" ) );
split.setRightComponent(panel2);
setVisible(true);
}
Agradezco a la comunidad la ayuda que puedan ofrecerme para solucionar el problema, ya que soy un aprendiz de programación. Puedo enviar copia de la imagen.
VICTOR viguita1309@gmail.com
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)