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?
Este es el código que tengo para leer byte por byte, pero tengo idea de como llegar a los bytes que tienen la información de los pixeles y sus colores RGB, una vez pueda obtener los colores RGB, lo que tengo que hacer es construir tres imágenes a partir de la imagen original, una formando pixeles con el valor en rojo encontrado en cada pixel, y cero en verde y azúl; lo mismo para crear una imagen solo de verde y otra solo de azúl.
Pero no se como encontrar el RGB leyendo cada byte. Ya leí este artículo
https://es.m.wikipedia.org/wiki/Windows_bitmap para ver el formato de un BMP, pero la verdad ya no sé como continuar.
Este es el código que llevo hasta el momento:
public void Build() {
int contador=0;
int aa = 0;
try{
FileInputStream archivo = new FileInputStream(mFile);
BufferedInputStream buff = new BufferedInputStream(archivo);
DataInputStream datos = new DataInputStream(buff);
try{
while (true){
for (int ii = 0; ii <= 17; ii++){
byte jj = datos.readByte();
}
int mAncho = datos.readInt();
int mAlto = datos.readInt();
if (aa == 0){
System.out.println("Ancho: " + mAncho + " - Alto: " + mAlto);
aa = 1;
}
/* System.out.printf("%d - %02X - %03d \n", contador++, in, in & 0xFF);
System.out.println(in);
Color color = new Color(in);
int red = color.getRed();
int green = color.getGreen();
int blue = color.getBlue();
int rgb = color.getRGB();
System.out.println("Rojo: " + red + " - Verde: " + green + " - Azul: " + blue + " - RGB: " + rgb);*/
}
}catch(EOFException eof){
buff.close();
}
}catch(IOException e){
System.out.println("Error " + e.toString());
}
}
De antemano agradezco todos los comentarios.