我正在开发一个应用程序,它在文件夹中拍摄图像,并将它们显示为缩略图,以便进一步选择和单独操作。下面是将它们添加到Jtogglebutton的代码。
toglBtn=new JToggleButton(""+i,new ImageIcon(ImageIO.read(new File(listOfFiles[i].getAbsolutePath())).getScaledInstance(139, 163, BufferedImage.SCALE_SMOOTH)));
我文件夹中的原始图像小于100kb,但Jtogglebutton大小为6mb。有没有办法减小这些文件的大小?目前,它占用了我所有的堆空间,当文件超过40个时,就会出现内存不足的错误。我已经将堆大小增加到512MB,但在使用MAT分析堆转储之后,我认为需要减小缩略图大小来解决此错误。
有什么方法可以强制缩略图为jpeg吗?或者其他向jtogglebutton添加缩略图的方法?
最终更新:我使用thumbnailator将按钮的大小减小到几kb
try{
BufferedImage originalImage = ImageIO.read(new File(listOfFiles[i].getAbsolutePath()));
Image image =Thumbnails.of(originalImage).size(138, 163).asBufferedImage();
toglBtn=new JToggleButton(""+i,new ImageIcon(image));
}
发布于 2013-02-07 22:30:06
也许您的一行Java代码将原始图像、缩放后的图像和图像图标保存在内存中。
以这种方式分解代码可以确保删除原始图像和缩放后的图像进行垃圾回收。
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JToggleButton;
String text = "" + i;
File imageFile = new File(listOfFiles[i].getAbsolutePath());
BufferedImage image = ImageIO.read(imageFile);
Image scaledImage = image.getScaledInstance(139, 163,
BufferedImage.SCALE_SMOOTH);
ImageIcon imageIcon = new ImageIcon(scaledImage);
toglBtn = new JToggleButton(text, imageIcon);
https://stackoverflow.com/questions/14737972
复制相似问题