Frage

Ich habe gesucht, wie man eine Bmp-Datei in ein 2- oder 1-dimensionales Array unter C liest. Es gibt viele Lösungen, aber nicht die, die ich brauche. Ich muss das Schwarz-Weiß-BMP in ein zweidimensionales Array lesen (um zu beginnen), das Werte von 0 bis 255 (Graustufen) enthalten muss. und dann in ein eindimensionales Array umwandeln (aber das ist kein Problem). Matlab macht das automatisch, aber ich möchte autonomer unter C / C ++ arbeiten am ende soll der bmp in einem postgre datenbank int array gespeichert werden. Danke

War es hilfreich?

Lösung

Es gibt einen BMP-Loader, den ich für eine andere SO-Frage erstellt habe:
http://nishi.dreamhosters.com/u/so_bmp_v0.zip
Das Beispiel bmp dort ist RGB, aber es scheint auch mit Graustufen zu funktionieren.

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 Hier ist der Zeiger auf die Pixeltabelle (sollte ohne Vorzeichen sein für den richtigen Zugang).Beachten Sie, dass Pixelzeilen in bmp in gespeichert werden können umgekehrte Reihenfolge.

Andere Tipps

Entschuldigung, falsch interpretierte Frage: /
Wenn es Ihnen nichts ausmacht, die Regeln ein wenig zu "verdrehen"

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top