Problema conceptual con BMP?!?!
Publicado por Javier (8 intervenciones) el 19/07/2005 15:39:17
Hola a todos...
Estoy intentando crear un miniprocesador de imagenes BMP... pero tengo varios problemas...
Soy capaz de crear una copia de la imagen mediante el codigo siguiente:
----------------------------------------------------------------------------------------------------------------------------
// Leemos los encabezamientos
fread(&EncabezadoImagen,sizeof(EncabezadoImagen), 1, PunteroImagenInicial);
fread(&InformacionEncabezadoImagen,sizeof(InformacionEncabezadoImagen), 1, PunteroImagenInicial);
//Guardamos la anchura y altura de la imagen
altura = InformacionEncabezadoImagen.biHeight;
anchura= InformacionEncabezadoImagen.biWidth;
unsigned char *Rojo=new unsigned char[altura*anchura];
unsigned char *Verde=new unsigned char[altura*anchura];
unsigned char *Azul=new unsigned char[altura*anchura];
// Leemos la Imagen Inicial
for(int i=0 ; i<(altura * anchura) ; ++i) {
Azul[i]=fgetc(PunteroImagenInicial);
Verde[i]=fgetc(PunteroImagenInicial);
Rojo[i]=fgetc(PunteroImagenInicial);
}
----------------------------------------------------------------------------------------------------------------------------
y copio la imagen mediante otro bucle en otras variables... y creo otro fichero, inserto los datos y obtengo la copia... pero mi problema viene en lo siguiente...
Si yo quiero copiar simplemente la mitad de la imagen o quiero pintar una linea del archivo de un color determinado NO PUEDO!!!!!! Y no entiendo por qué no.... en función de los indices que ponga no pinto nada, pinto toda la foto o nada de nada... y yo creo que tengo todos los datos bien, que simplemente tendría que modificar los vectores y ya está... ¿no es asi? Por ejemplo... intento copiar la mitad de la imagen y la otra mitad pintarla de negro... utilizando el siguiente código:
---------------------------------------------------------------------------------------------------------------------------
for(int o=0; o<anchura; o++){
for( int u=0;u<altura/2;u++){
Rojo4[u*anchura + o]=Rojo[u*anchura + o];
Verde4[u*anchura + o]=Verde[u*anchura + o];
Azul4[u*anchura + o]=Azul[u*anchura + o];
}
for( int u=altura/2;u<altura;u++){
Rojo4[u*anchura + o]=0;
Verde4[u*anchura + o]=0;
Azul4[u*anchura + o]=0;
}
}
---------------------------------------------------------------------------------------------------------------------------
¿Alguien me puede ayudar?
Muchas gracias
Estoy intentando crear un miniprocesador de imagenes BMP... pero tengo varios problemas...
Soy capaz de crear una copia de la imagen mediante el codigo siguiente:
----------------------------------------------------------------------------------------------------------------------------
// Leemos los encabezamientos
fread(&EncabezadoImagen,sizeof(EncabezadoImagen), 1, PunteroImagenInicial);
fread(&InformacionEncabezadoImagen,sizeof(InformacionEncabezadoImagen), 1, PunteroImagenInicial);
//Guardamos la anchura y altura de la imagen
altura = InformacionEncabezadoImagen.biHeight;
anchura= InformacionEncabezadoImagen.biWidth;
unsigned char *Rojo=new unsigned char[altura*anchura];
unsigned char *Verde=new unsigned char[altura*anchura];
unsigned char *Azul=new unsigned char[altura*anchura];
// Leemos la Imagen Inicial
for(int i=0 ; i<(altura * anchura) ; ++i) {
Azul[i]=fgetc(PunteroImagenInicial);
Verde[i]=fgetc(PunteroImagenInicial);
Rojo[i]=fgetc(PunteroImagenInicial);
}
----------------------------------------------------------------------------------------------------------------------------
y copio la imagen mediante otro bucle en otras variables... y creo otro fichero, inserto los datos y obtengo la copia... pero mi problema viene en lo siguiente...
Si yo quiero copiar simplemente la mitad de la imagen o quiero pintar una linea del archivo de un color determinado NO PUEDO!!!!!! Y no entiendo por qué no.... en función de los indices que ponga no pinto nada, pinto toda la foto o nada de nada... y yo creo que tengo todos los datos bien, que simplemente tendría que modificar los vectores y ya está... ¿no es asi? Por ejemplo... intento copiar la mitad de la imagen y la otra mitad pintarla de negro... utilizando el siguiente código:
---------------------------------------------------------------------------------------------------------------------------
for(int o=0; o<anchura; o++){
for( int u=0;u<altura/2;u++){
Rojo4[u*anchura + o]=Rojo[u*anchura + o];
Verde4[u*anchura + o]=Verde[u*anchura + o];
Azul4[u*anchura + o]=Azul[u*anchura + o];
}
for( int u=altura/2;u<altura;u++){
Rojo4[u*anchura + o]=0;
Verde4[u*anchura + o]=0;
Azul4[u*anchura + o]=0;
}
}
---------------------------------------------------------------------------------------------------------------------------
¿Alguien me puede ayudar?
Muchas gracias
Valora esta pregunta


0