Почему ImageIO не читает файл BMP, пока он не будет повторно сохранен в MS Paint?

У меня есть файл растрового изображения, test3.bmp , который я могу просматривать и редактировать в каждой программе просмотра изображений, с которой я тестировал.

Тем не менее, я не могу прочитать это в своем Java-приложении. Если я редактирую BMP в MS Paint, сохраняю его, отменяю изменение и сохраняю ( test3_resaved.bmp ), у меня будет то же изображение, но с другим размером файла. Меня не беспокоят разные размеры файлов ... главное, что мое приложение может читать повторно сохраненный файл.

Может ли кто-нибудь объяснить мне, почему одно изображение работает с моим кодом, а другое - нет?

Файлы изображений:

Вот минимальное тестовое приложение:

package Test;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

@SuppressWarnings("serial")
public class Test extends JFrame {
    private ImageIcon imageIcon;

    public Test(String filename) throws IOException {
        super();
        BufferedImage image = javax.imageio.ImageIO.read(new File(filename));
        imageIcon = new ImageIcon(image);
        setVisible(true);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        repaint();
    }

    public void paint(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        setSize(imageIcon.getIconWidth(), imageIcon.getIconHeight());
        if (imageIcon != null)
            g2d.drawImage(imageIcon.getImage(), 0, 0, this);
    }


    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            if (args.length > 0)
                new Test(args[0]);
            else
                System.out.println("usage - specify image filename on command line");
        }
        catch (Throwable t) {
            t.printStackTrace();
        }
    }

}

8
задан Thomas Eding 22 November 2011 в 02:17
поделиться