1

私は、フォルダ内の画像を取得し、それらをサムネイルとして表示して、個別に選択および操作できるようにするアプリケーションに取り組んでいます。以下は、それらをJtogglebuttonsに追加するコードです。

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にする方法はありますか?またはjtogglebuttonsにサムネイルを追加する他の方法はありますか?

最終更新: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));
                            }
4

1 に答える 1

1

おそらく、1つの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);
于 2013-02-07T14:30:05.797 に答える