Java图标图像最大文件大小

时间:2015-08-06 12:50:12

标签: java image swing filesize imageicon

我正在开发一款关于Java的国际象棋游戏。我一直在将图像导入Eclipse,然后将它们分配给ImageIcons,然后将这些ImageIcons分配到按钮上以形成网格。

在我的四个主教图像中有三个没有被分配到各自的按钮,所以我看了文件大小,结果发现三个图像的大小没有分配大约是1,100KB ,~1,200KB,~40KB。分配给按钮的图像大约为25KB。我认为这很奇怪(特别是因为所有四个图像非常相似)所以我以较低的分辨率(均低于30KB)导出了三个有问题的图像,然后将它们重新导入Eclipse。当我再次运行我的程序时,他们被分配到正确的按钮,一切都顺利运行。

我使用的按钮都是75 x 75像素,每张图像的像素相同(75 x 75),所以我很困惑为什么会这样。我找了与此有关的任何问题,但我找不到任何问题。如果有人能帮助解释为什么这会发生在我身上会非常有帮助,所以我可以在将来避免这个问题。

2 个答案:

答案 0 :(得分:1)

我肯定已经将图像加载到ImageIcons和其他组件中的大得多,所以我怀疑你的问题是在Image完全加载之前将Image分配给ImageIcon。您可以使用MediaTracker来帮助解决此问题。来自ImageIcon:

/** * Loads an image into memory */ 
public static Image loadImage(String fn){ 
  try { 
    Image image=java.awt.Toolkit.getDefaultToolkit().createImage(fn);
    MediaTracker tracker=new MediaTracker(lblForFM); tracker.addImage(image,0); 
    tracker.waitForID(0);
    if (MediaTracker.COMPLETE != tracker.statusID(0,false)) throw new 
       IllegalStateException("Unable to load image from " + fn); 
    else return image; } catch ( InterruptedException e) { 
      throw new RuntimeException("Interrupted while loading image from " + fn,e); 
    } 
} 

答案 1 :(得分:0)

我建议将png用于透明图像和图标,jpg用于非透明图像 - 并且仅当压缩工件无关紧要时(lossless JPEG遗憾地不会广泛传播) 。 bmp是文件大小最差的文件格式之一。正如其他人所建议的那样,使用ImageIO API在java中加载图像:

public class Program {
    public static void main(String[] args) {
        InputStream imageSource = Program.class.getResourceAsStream("bishop"); // may be a URL, File or ImageInputStream instead
        try {
            BufferedImage bishopImage = ImageIO.read(imageSource); // read image
            ImageIcon bishopIcon = new ImageIcon(bishopImage); // use adapter for Icon interface
            System.out.println(bishopIcon); // do something with it
        } catch (IOException e) {
            e.printStackTrace(); // read failed
        }
    }
}