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?

¿Fue útil?

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.

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.

  1. Crear la imagen BMP 2x2 se muestra en la Wikipedia.
  2. Abrir el archivo en modo binario utilizando su programa C.
  3. Se posiciona en el byte 54.
  4. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top