Abrufen der Pixelwert von BMP-Datei
Frage
ich habe eine Frage zum Lesen eines bmp Bild. Wie kann ich den Pixelwert (R, G, B-Werte) in einem BMP-Bild bekommen? Kann mir jemand helfen mit mir die Programmiersprache C?
Lösung
Der einfache Weg wäre eine gute Bibliothek zur Bildbearbeitung für Ihre gewählte Plattform zu finden und zu verwenden.
- Linux imlib / GDK-pixbuf (Gnome / GTK) / QT Bild (KDE / Qt) sollte tun können, was Sie brauchen.
- Fenster Ich bin nicht vertraut mit der entsprechenden System-Bibliothek, sondern ein MSDN Suche nach "Bitmap" wahrscheinlich ein guter Anfang ist.
- Mac OSX Cocoa einige Bildbearbeitungsfunktionen hat, finden Sie unter dieser Artikel .
Der harte Weg wäre, die Datei zu öffnen und interpretieren tatsächlich die Binärdaten im Innern. Dazu müssen Sie die BMP-Datei-Spezifikation . Ich würde empfehlen, zunächst die einfache Möglichkeit, zu versuchen.
Andere Tipps
Hinweis: Sie müssen ein zusätzliches Byte für die Alpha-Werte greifen, wenn Ihre BMP Alpha-Kanal. In diesem Fall Bild wäre image[pixelcount][4]
, und Sie würden eine andere getc(streamIn)
Zeilen hinzufügen, dass vierten Index zu halten. Meine BMP erwies sich nicht, dass müssen.
// 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
Sie müssen das BMP-Dateiformat studieren. Es ist einfacher, unkomprimierte 24-Bit-BMP-Dateien zu lesen. Sie enthalten nur einen Header an den Anfang und RGB-Werte jedes Pixels.
mit diesem zu starten, klicken Sie das Beispiel von 2x2 Bitmap-Bild unter http://en.wikipedia.org / wiki / BMP_file_format . Folgen Sie den unten angegebenen Schritten.
- Erstellen Sie das 2x2 BMP-Bild auf Wikipedia gezeigt.
- Öffnen Sie die Datei im Binärmodus Ihr C-Programm. Suchen
- Byteposition 54
- Read 3 Bytes.
Das Bytes wäre 0, 0 und 255 ist. (Nicht sicher, ob der Auftrag ist RGB. Ich hatte diese lange zurück gemacht und ich denke, dass die Reihenfolge nicht RGB ist. Genau dies überprüfen.)
So einfach ist das! Studieren Sie die Header des BMP mehr über das Format zu verstehen.