Tengo un archivo de mapa de bits, test3.bmp
, que puedo ver y editar con cada visor de imágenes con el que haya probado.¿Por qué ImageIO no lee un archivo BMP hasta que se vuelve a guardar en MS Paint?
Dicho esto, no puedo leerlo en mi aplicación Java. Si edito el BMP en MS Paint, lo guardo, deshago el cambio y lo guardo (test3_resaved.bmp
), tengo la misma imagen, pero con un tamaño de archivo diferente. Los diferentes tamaños de archivo no me conciernen ... lo que hace, es que mi aplicación puede leer el archivo re-guardado.
¿Alguien podría aclararme por qué una imagen funciona con mi código pero la otra no?
Los archivos de imágenes:
Aquí es una aplicación de prueba mínima:
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();
}
}
}
hay un montón ** ** de diferentes tipos de archivos BMP. Probablemente, su * MS Paint * puede leer el formato original pero está usando otros encabezados/codificación BMP al guardar el archivo nuevamente. Sé con certeza que Java definitivamente no puede leer todos los diversos archivos BMP (pocos lectores de BMP pueden). Simplemente sucede que Java admite ese tipo particular de BMP que MS Paint produce. Por qué BMP? Si quieres sin pérdida, ¿sería PNG una opción? – TacticalCoder
mismo problema aquí que "Roman B" ... Los enlaces para el archivo BMP no pueden funcionar. Podría hexdump los encabezados (el comienzo) de ambos archivos y agregar el resultado a su pregunta, pero a mí de todos modos el problema es precisamente lo que describí arriba: -/ – TacticalCoder