首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >swing小程序..jtogglebutton大小为6mb。如何减小大小?

swing小程序..jtogglebutton大小为6mb。如何减小大小?
EN

Stack Overflow用户
提问于 2013-02-07 04:16:55
回答 1查看 306关注 0票数 1

我正在开发一个应用程序,它在文件夹中拍摄图像,并将它们显示为缩略图,以便进一步选择和单独操作。下面是将它们添加到Jtogglebutton的代码。

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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));
                            }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-07 22:30:06

也许您的一行Java代码将原始图像、缩放后的图像和图像图标保存在内存中。

以这种方式分解代码可以确保删除原始图像和缩放后的图像进行垃圾回收。

代码语言:javascript
运行
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14737972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档