Obtener el valor de píxel del archivo BMP
Pregunta
Tengo una pregunta para la lectura de una imagen BMP. ¿Cómo puedo obtener el valor del píxel (R, G, B valores) una imagen BMP en? Puede alguien ayudarme a usar el lenguaje de programación C?
Solución
La forma más fácil sería encontrar una biblioteca de manipulación de imágenes bueno para su plataforma elegida y usar eso.
- Linux Imlib / GDK-Pixbuf (Gnome / GTK) / QT imagen (KDE / Qt) debe ser capaz de hacer lo que necesita.
- Windows No estoy familiarizado con la biblioteca del sistema apropiado, pero un MSDN Búsqueda de 'mapa de bits' es probablemente un lugar bueno para comenzar.
- Mac OS X cacao tiene algunas capacidades de manipulación de imágenes, consulte este artículo .
La forma más dura sería abrir el archivo y, de hecho interpretar los datos binarios en su interior. Para ello necesitará el BMP archivo de especificación de . Recomiendo probar el camino más fácil primero.
Otros consejos
Nota: puede que tenga que tomar un byte adicional para los valores alfa si su BMP tiene canal alfa. En ese caso sería la imagen image[pixelcount][4]
, y deberá añadir otra línea getc(streamIn)
para mantener esa cuarta índice. Mi BMP resultó que no necesita.
// super-simplified BMP read algorithm to pull out RGB data
// read image for coloring scheme
int image[1024][3]; // first number here is 1024 pixels in my image, 3 is for RGB values
FILE *streamIn;
streamIn = fopen("./mybitmap.bmp", "r");
if (streamIn == (FILE *)0){
printf("File opening error ocurred. Exiting program.\n");
exit(0);
}
int byte;
int count = 0;
for(i=0;i<54;i++) byte = getc(streamIn); // strip out BMP header
for(i=0;i<1024;i++){ // foreach pixel
image[i][2] = getc(streamIn); // use BMP 24bit with no alpha channel
image[i][1] = getc(streamIn); // BMP uses BGR but we want RGB, grab byte-by-byte
image[i][0] = getc(streamIn); // reverse-order array indexing fixes RGB issue...
printf("pixel %d : [%d,%d,%d]\n",i+1,image[i][0],image[i][1],image[i][2]);
}
fclose(streamIn);
~ Locutus
Es necesario estudiar el formato de archivo BMP. Es más fácil de leer sin comprimir archivos BMP de 24 bits. Que sólo contienen un encabezado en los valores de inicio y RGB de cada píxel.
Para comenzar con esto, compruebe el ejemplo de una imagen de mapa de bits de 2x2 en http://en.wikipedia.org / wiki / BMP_file_format . Siga el siguiente pasos.
- Crear la imagen BMP 2x2 se muestra en la Wikipedia.
- Abrir el archivo en modo binario utilizando su programa C.
- Se posiciona en el byte 54.
- Leer 3 bytes.
Los bytes sería 0, 0 y 255 respectivamente. (No estoy seguro si la orden es RGB. Yo había hecho esto mucho tiempo atrás y creo que el orden no es RGB. Sólo verificar esto.)
Tan simple como eso! Estudiar la cabecera de la BMP a entender más sobre el formato.