es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué leer una matriz de bytes de un archivo BMP y perder la anchura (width) y altura (height)?

Mi servidor recibe una matriz de bytes de bmp mediante carga, y leo su ancho y altura, pero obtengo -1. Intento simular este caso de carga con el siguiente código:

public class ImageReader {

private static URL imgUrl;

public static void main(String[] args) throws IOException {
    imgUrl = ImageReader.class.getResource("myimage.jpg");
    printWidthHeight(imgUrl, "jpg");
    imgUrl = ImageReader.class.getResource("flag.bmp");
    printWidthHeight(imgUrl, "bmp");
}

private static void printWidthHeight(URL imgUrl, String format) throws IOException {
    BufferedImage image = ImageIO.read(imgUrl);
    System.out.println(image.getType());
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    boolean isAppropriate = ImageIO.write(image, format, baos);
    System.out.println(isAppropriate);
    byte[] bytes = baos.toByteArray();

    ImageIcon imageIcon = new ImageIcon(bytes);
    System.out.format("%s, %s \n", imageIcon.getIconWidth(), imageIcon.getIconHeight());
}
}

Imprime:

5
true
171, 125
5
true
-1, -1

Encontré lo siguiente:
* jpg todavía tiene ancho y altura, pero bmp no lo tiene

¿Alguien sabe la razón?

Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón por la cual el archivo bmp devuelve -1 para el ancho y la altura es que el formato del archivo puede no tener la información de encabezado necesaria para que la biblioteca ImageIO lo lea correctamente. Esto puede ocurrir si el archivo bmp no se guardó con un encabezado completo. Una forma de resolver este problema es utilizar una biblioteca diferente que pueda leer correctamente archivos bmp con encabezados incompletos, o asegurarse de que los archivos bmp se guarden con un encabezado completo desde el principio.

Comments are closed.