Java图标图像最大文件大小

Java图标图像最大文件大小,java,image,swing,filesize,imageicon,Java,Image,Swing,Filesize,Imageicon,我正在做一个关于Java的国际象棋游戏。我一直在将图像导入Eclipse,然后将它们分配给ImageIcons,然后将这些ImageIcons分配给按钮以形成网格 我的四个bishop图像中有三个没有被分配到各自的按钮,因此我查看了文件大小,结果发现三个没有被分配的图像的大小分别为~1100KB、~1200KB和~40KB。分配给按钮的图像大小约为25KB。我觉得这很奇怪(特别是因为所有四幅图像都非常相似),所以我以较低的分辨率(都低于30KB)导出了三幅有问题的图像,然后将它们重新导入Ecli

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

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


我使用的按钮都是75 x 75像素,每个图像的像素都是相同的(75 x 75),所以我不明白为什么会发生这种情况。我查找了与此相关的任何问题,但找不到任何问题。如果有人能帮我解释一下为什么会发生这种情况,那将非常有帮助,这样我以后就可以避免这个问题。

我肯定已经将比这个大得多的图像加载到ImageIcons和其他组件中,所以我怀疑您的问题在于,在图像完全加载之前,将图像分配给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); 
    } 
} 

我建议对透明图像和图标使用
png
,对非透明图像使用
jpg
——并且只有在压缩伪影无关紧要的情况下(遗憾的是,压缩伪影没有广泛传播)
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
        }
    }
}

图标使用什么文件格式?“我觉得这很奇怪(特别是因为所有四个图像都非常相似)”,使用什么逻辑系统,1.1MB图像与另一个只有25KB的图像“相似”?大的究竟为什么这么大?一个常用技巧是使用
ImageIO
加载图像-如果有问题,它将提供更多的反馈。@BinkanSalaryman我使用的是.jpgfiles@AndrewThompson我的意思是,它们的相似之处在于,每张照片的美感几乎相同,但由于某些原因,文件大小却大不相同是的,很好,但是你能回答我的第二个问题并报告使用
ImageIO
的结果吗?很明显,那些“相同像素”的图像是用……非常不同的格式编码的。Ssee也是(但我还是更喜欢
ImageIO
,它会一直阻塞到图像完全加载)。