我创建了一个Java应用程序,它可以读取输入图像,然后创建一个输出图像(组合颜色),我已经使它读取TIFF文件。输入图像需要是多光谱卫星图像,其通常非常大。我通过读取TIFF文件转换为PNG,将它们保存为本地PNG,然后将保存的PNG作为BufferedImage
读取。保存的PNG大约是一半大小(约35MB)。
如果可能的话,我真的不想扩展堆大小,如果我能找到一种重新分配内存的方法会很好,如果我能找到一种方法,那将会非常好。但我想使用大型图像文件意味着它是不可避免的,特别是当我需要使用BufferedImages
并且可能需要使用更多时。
使用的代码可以在下面看到,重复3次,因此正在读取,保存3个TIFF文件,然后在PNG时读取。基本上我从来没有读过TIFF文件,但是在任何时候都没有,所以这将是一个回收内存的方法吗?
private void importBlueActionPerformed(java.awt.event.ActionEvent evt) {
int img3 = blueFileChooser.showOpenDialog(this);
if(img3==JFileChooser.APPROVE_OPTION)
{
try {
File file3 = blueFileChooser.getSelectedFile();
BufferedImage bi3 = ImageIO.read(file3);
ImageIO.write(bi3, "PNG", new File("img3_tmp.png"));
image3 = ImageIO.read(new File("img3_tmp.png"));
//image3 = new BufferedImage(img3_tmp.getWidth(), img3_tmp.getHeight(), BufferedImage.TYPE_INT_ARGB);
ImageIcon imageIcon3 = new ImageIcon(image3);
Image blueInput = imageIcon3.getImage().getScaledInstance(300, 300, Image.SCALE_SMOOTH);
imageIcon3.setImage(blueInput);
blueLabel.setIcon(imageIcon3);
System.out.println(file3+"\n"+image3);
inputCounter++;
checkInput();
} catch (IOException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}