Tôi có một tệp bitmap, test3.bmp
, mà tôi có thể xem và chỉnh sửa với mọi trình xem hình ảnh mà tôi đã thử nghiệm.Tại sao ImageIO không đọc tệp BMP cho đến khi nó được lưu lại trong MS Paint?
Điều đó nói rằng, tôi không thể đọc nó vào ứng dụng Java của mình. Nếu tôi chỉnh sửa BMP trong MS Paint, hãy lưu nó, hoàn tác thay đổi và lưu nó (test3_resaved.bmp
), tôi có cùng một hình ảnh, nhưng với kích thước tệp khác. Các kích thước tập tin khác nhau không liên quan đến tôi ... những gì hiện, là ứng dụng của tôi có thể đọc các tập tin được lưu lại.
Ai đó có thể khai sáng cho tôi về lý do tại sao một hình ảnh hoạt động với mã của tôi, nhưng hình kia không?
hình ảnh tập tin:
Dưới đây là một ứng dụng thử nghiệm tối thiểu:
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();
}
}
}
có ** ** ** ** ** ** ** ** ** nhiều loại tệp BMP khác nhau. Có thể là * MS Paint * của bạn có thể đọc định dạng gốc nhưng đang sử dụng các tiêu đề BMP/mã hóa khác khi lưu lại tệp. Tôi biết chắc chắn rằng Java chắc chắn không thể đọc tất cả các tập tin BMP khác nhau ra khỏi đó (vài người đọc BMP có thể). Nó chỉ xảy ra là Java hỗ trợ loại BMP cụ thể mà MS Paint xuất ra. Tại sao BMP? Nếu bạn muốn lossless, PNG sẽ là một lựa chọn? – TacticalCoder
cùng một vấn đề ở đây là "Roman B." ... Các liên kết cho tệp BMP không thể hoạt động. Bạn có thể hexdump các tiêu đề (đầu) của cả hai tập tin và thêm kết quả cho câu hỏi của bạn nhưng với tôi anyway vấn đề là chính xác những gì tôi mô tả ở trên: -/ – TacticalCoder