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.



  • http://www.wotsit.org/

    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.


Anmelden zum Antworten