Domanda

Ho cercato come leggere un file BMP in un array a 2 o 1 dimensioni sotto C, ci sono molte soluzioni ma non quella di cui ho bisogno. Ho bisogno di leggere il bmp in bianco e nero in (per iniziare) un array bidimensionale che deve contenere valori da 0 a 255 (scala di grigi) e poi trasformalo in un array 1 dimensionale (ma non è un problema). Matlab lo fa automaticamente, ma voglio essere più autonomo lavorando in C / C ++ alla fine il bmp verrà salvato in un array di Postgre Database int. Grazie

È stato utile?

Soluzione

C'è un caricatore bmp che ho creato per un'altra domanda SO:
http://nishi.dreamhosters.com/u/so_bmp_v0.zip
L'esempio bmp è RGB, ma sembra funzionare anche con la scala di grigi.

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;

bitmap ecco il puntatore alla tabella dei pixel (dovrebbe essere reso non firmato per un corretto accesso però).Si noti che le righe di pixel in bmp possono essere archiviate in ordine inverso.

Altri suggerimenti

Spiacenti, domanda interpretata male: /
Se non ti dispiace "stravolgere" le regole un po '

#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;
}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top