Pregunta

Busqué cómo leer un archivo Bmp en una matriz bidimensional o unidimensional en C, hay muchas soluciones pero no la que necesito. Necesito leer el bmp en blanco y negro en (para comenzar) matriz bidimensional que debe contener valores de 0 a 255 (escala de grises) y luego transformarlo en una matriz de 1 dimensión (pero eso no es un problema). Matlab hace esto automáticamente pero quiero ser más autónomo trabajando bajo C / C ++ al final, el bmp se guardará en una matriz int de la base de datos de Postgre. Gracias

¿Fue útil?

Solución

Hay un cargador de BMP que hice para otra pregunta SO:
http://nishi.dreamhosters.com/u/so_bmp_v0.zip
El bmp de ejemplo es RGB, pero parece funcionar también con escala de grises.

FILE* f = fopen( "winnt.bmp", "rb" ); if( f==0 ) return 1;
fread( buf, 1,sizeof(buf), f );
fclose(f);

BITMAPFILEHEADER& bfh = (BITMAPFILEHEADER&)buf[0];
BITMAPINFO& bi = (BITMAPINFO&)buf[sizeof(BITMAPFILEHEADER)];
BITMAPINFOHEADER& bih = bi.bmiHeader; 
char* bitmap = &buf[bfh.bfOffBits];
int SX=bih.biWidth, SY=bih.biHeight;

mapa de bits aquí está el puntero a la tabla de píxeles (debe dejarse sin firmar aunque para un acceso adecuado).Tenga en cuenta que las filas de píxeles en bmp se pueden almacenar en orden inverso.

Otros consejos

Lo siento, pregunta mal leída: /
Si no le importa "torcer" las reglas un poquito

#include <stdio.h>

int main(void) {
  int data[100][30] = {{0}}; /* initialize 2D array to all zeroes */
  int *p1d;
  size_t index;

  data[42][20] = 42; /* set 1 element ot 42 */
  p1d = &data[0][0];
  index = 42*30 + 20;
  printf("%d (should be 42)\n", p1d[index]); /* pretend it's a 1D array */
  return 0;
}

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