Farbwert eines bestimmten Pixels in einer BMP
-
Hi,
ich hab ne BMP nun jetzt möchte ich in meiner Konsole einen Farbwert ausgeben von einem Bestimmten Pixel z.B. von dem Pixel 3x55.
Weis einer wie das geht? Achja die BMP ist Graustufen und hat 256 Farben.
-
benutzt du eine bibliothek?
allegro zum bleistift?
-
nein ich wollte für sowas keine Lib, da es sich ja nur um eine BMP handelt.
-
hier findest du die bildaten... hatte was anderes verstanden
-
Hm die format beschreibung bringt mir irgendwie herzlichst wenig
-
Hi,
Ich hab das jetzt hier mal versucht, doch das programm schmiert einfach ab
int blub (int x, int y) { LPBYTE lpbyBild; // Speichert die BMP Bilddaten HANDLE hDatei; // Hanlde auf die BMP Datei BITMAPFILEHEADER BMPFileHead; // BMP Datei Header BITMAPINFOHEADER BMPFileInfo; // BMP Datei Info Header RGBQUAD Palette[256]; // Farbpalette DWORD dwLeseSpeicher; // Zwischenspeicher // BMP Datei öffnen hDatei = CreateFile("test.bmp", // Datei Name GENERIC_READ, // Nur lesen FILE_SHARE_READ, // andere auch (LPSECURITY_ATTRIBUTES) NULL, // keine Attrib. OPEN_EXISTING, // exist. Datei FILE_ATTRIBUTE_NORMAL, // norm.Attrib. (HANDLE) NULL); // if (hDatei == INVALID_HANDLE_VALUE) return FALSE; // BMP Header einlesen if (!ReadFile(hDatei, &BMPFileHead, sizeof(BMPFileHead), &dwLeseSpeicher, NULL)) { CloseHandle(hDatei); return FALSE; } // BMP Info-Header einlesen if (!ReadFile(hDatei, &BMPFileInfo, sizeof(BMPFileInfo), &dwLeseSpeicher, NULL)) { CloseHandle(hDatei); return FALSE; } // Lies und speichere die Palette des BMP if (!ReadFile(hDatei, Palette, sizeof(Palette), &dwLeseSpeicher, NULL)) { CloseHandle(hDatei); return FALSE; } // Lies die eigentlichen Bilddaten des BMP if (!ReadFile(hDatei, lpbyBild, BMPFileInfo.biWidth*BMPFileInfo.biHeight, &dwLeseSpeicher, NULL)) { CloseHandle(hDatei); return FALSE; } // Schliesse die Datei wieder CloseHandle(hDatei); return static_cast<int>(lpbyBild[x + y*BMPFileInfo.biWidth]); }
-
-> Debugger. Dann weiß man wenigstens an welcher Stelle dein Programm abstürzt.
-
Wenn ich mich nicht irre, gibt es verschiedene BMP-Formate, sodass nach der Auswertung des BMP-Headers differenziert werden muss.
Ausserdem kriegst Du mit Deinem x/y-Zugriff bestenfalls den Palettenindex.
Die eigentliche Farbe musst Du dann noch aus der Palette holen.Vorschlag: hör auf elise und schau mal Allegro an. Das hat eine komplette BMP->Bitmap-Lade+Konvertierungsroutine und eine Farbbestimmungsfunktion ausserdem.