Leer matriz de pixeles de imagen BMP

Amigos:

Para un proyecto de la universidad debo leer los siguientes datos de una imagen BMP:

* Ancho
* Alto
* Matriz de pixeles
* Rojo, Verde y Azul de cada pixel

Estas acciones debo poder realizarlas sin utilizar las clases: java.awt.Image (que incluye clases como BufferedImage), javax.imageIO, o la clase imageIO, por restricciones del proyecto no puedo utilizar estas clases.

He investigado y todas las formas que encuentro para hacer lo que necesito es utilizando las clases que tengo restringidas para este proyecto.

Alguno de ustedes me puede ayudar con esto?

De antemano agradezco todos los comentarios.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Lee el archivo y procésalo

Cual es la razón de esa restricción? El proyecto se trata de precisamente crear un lector de bmp?

Puedes leer el archivo y procesarlo de acuerdo a la especificación.

Aquí hay un ejemplo:

https://en.wikipedia.org/wiki/BMP_file_format#Example_1

Según ese ejemplo el tamaño se encuentra en la posición 18 y 22 (0x12 y 0x16) del archivo

...

12h 4 02 00 00 00 2 pixels (left to right order) Width of the bitmap in pixels
16h 4 02 00 00 00 2 pixels (bottom to top order) Height of the bitmap in pixels
...

Entonces puedes leer el archivo en un arreglo y tomar los bytes 0x12 al 0x15 para saber el ancho y los bytes 0x16 al 0x19 para saber el alto.

Por ejemplo, guardé esta imagen como "ejemplo.bmp"

Y leyendo todo en un arreglo imprimiendo las posiciones 0x12 y 0x16 se pueden ver que el ancho y alto coinciden con lo que reporta el sistema operativo

//  BmpReader.java
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;

class BmpReader {
    public static void main(String ... args) throws IOException {
        byte[] data = Files.readAllBytes(Paths.get("./ejemplo.bmp"));
        System.out.printf("%d x %d",  data[0x12], data[0x16] );
    }
}
~/c/j/ $ java BmpReader
127 x 64

127 x 64

En ese ejemplo no leí los todos los bytes del ancho y el alto porque ya sabía que me bastaba con leer el primer byte. También estoy leyendo todo el archivo de un jalón pero no necesariamente tiene que ser así, es solo un ejemplo.