Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Conversor de imagenes de 12 a 24 bits/pixel

Estas en el tema de Conversor de imagenes de 12 a 24 bits/pixel en el foro de C/C++ en Foros del Web. Hola a todos, soy nuevo en el foro. Estoy intentando hacer un conversor de formato de imágenes bmp de 12 bits a 24 bits por ...
  #1 (permalink)  
Antiguo 11/09/2010, 14:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1
Antigüedad: 14 años, 3 meses
Puntos: 0
Conversor de imagenes de 12 a 24 bits/pixel

Hola a todos, soy nuevo en el foro. Estoy intentando hacer un conversor de formato de imágenes bmp de 12 bits a 24 bits por pixel. Sin embargo se me han presentado ciertos problemas, creía hasta cierto momento tener todo el programa, de hecho corre, pero la función de convertir12a24(Imagen * imgOrigen) no me esta haciendo lo correcto. Se que esta es la función que esta mal. Les pido el favor me ayuden. En serio llevo tratandolo de hacer hace horas y no me he iluminado. El programa compila en Visual C++, no se si tengan problemas los de Dev. Esta es la función que se que esta mal, no se si sean los corrimientos no se que es. Gracias por su atención

// Esta función se encarga de convertir una estructura imagen en formato de 12 bits (formato de origen) a una estructura de 24 bits (formato de destino).
// imgOrigen es el apuntador a la imagen (originalmente en formato de 12 bits)
// Se debe tener en cuenta la convención de representación explicada en el enunciado del proyecto.
// Cada pixel debe escalarse, para que al pasarlo de 12 a 24 bits conserve la proporción de los colores.


void convertir12a24(Imagen * imgOrigen)
{

unsigned char temp1 [MAX_ANCHO];
unsigned char temp2 [MAX_ANCHO];
int i = 0;
int j = 0;
int e = 0;
int c = 0;
unsigned char a;
unsigned char b;
unsigned char ab;

int an = 0;
int al = 0;
an = imgOrigen->ancho;
al = imgOrigen->alto;
for(i = 0; i < MAX_ALTO; i++){
for( j= 0 ; j < MAX_ANCHO; j++){


a = imgOrigen->pixel[i][j];
b = imgOrigen->pixel[i][j];


a = a >> 4;
ab= a >> 4;

a = a || ab;

temp1 [j] = a;

a = imgOrigen->pixel[i][j];
a = a << 4;
ab= a >> 4;
a = a || ab;

temp2 [j] = a ;

}
for(e = 0; e < MAX_ANCHO/2 ; e++) {
imgOrigen->pixel[i][e] = temp1 [e];
imgOrigen->pixel[i][e+1] = temp2 [e];

}
}
}
  #2 (permalink)  
Antiguo 12/09/2010, 04:57
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: Conversor de imagenes de 12 a 24 bits/pixel

Podrias agregar, junto a la funcion, el codigo que permite darse cuenta que ella es incorrecta.
O, alternativamente, indicar que hace que tu sospeches de esta funcion,
  #3 (permalink)  
Antiguo 13/09/2010, 05:07
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 6 meses
Puntos: 73
Respuesta: Conversor de imagenes de 12 a 24 bits/pixel

Si los 12 bits corresponden a un formato de 4 bits para cada uno de los colores rojo, verde y azul, no debería tener ninguna complicación. Supongamos que el pixel original (en 12 bits) lo tengo en un entero. Podría hacerse:

int pix12;
struct pix24
{
char rojo;
char verde;
char azul;
};

pix24.rojo = (char)(pix12 % 16);
pix24.verde = (char)((pix12 >> 4) % 16);
pix24.azul = (char)((pix12 >> 8) % 16);

Otra cosa es el origen de la imagen que quieres procesar. Por el número de bits, que me parece un tanto raro para información de color, parece que la imagen proceda de algún tipo de cámara o scanner, y que ese valor en 12 bits, aunque así lo parezca, no corresponda a información de color, sino de intensidad de señal recibida. Si es ese el caso, pon un post y lo vemos con más detalle.

Etiquetas: conversor, imagenes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:58.