У меня есть файл растрового изображения, 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();
}
}
}