Helligkeit aus einem TGA oder Bitmap auslesen



  • Ich suche grade nach eine Möglichkeit die Helligkeit bzw. den Grauwert eines Pixels in einem Bild zu bestimmen. (und zwar ohne die glaux lib)
    Das wollte ich machen, weil ich die Heightmaps nicht mehr über ein eigenes Dateiformat bearbeiten wollte, doch leider finde ich zu dem Thema nicht viel. Hat evtl jemand schon so eine Funktion? Das würde mir viel Arbeit ersparen.
    Ich benutze übrigens OpenGl und Linux. Mein bisheriger Ansatz mit SDL ist nicht so gut, zumal die SDL Doku auch fehlerhaft war.



  • Ja, die Möglichkeit gibt es selbstverständlich! Siehe hierzu:

    http://de.wikipedia.org/wiki/Targa_Image_File
    http://de.wikipedia.org/wiki/Windows_Bitmap



  • Der Witz ist eigentlich, dass ich darauf verzichten wollte einen weiteren Dateiparser zu basteln.



  • Du könntest z.B. die FreeImage verwenden um deine Bilder zu laden:

    http://freeimage.sourceforge.net/



  • wird wohl das beste sein...



  • also bisher wird die bildgröße richtig erkannt, aber wenn ich versuche den farbwert auszulesen stürzt das programm ab. und zwar schon beim simplen funktionsaufruf von "getPixelColor". habe ich irgendwas vergessen?

    //bild laden
       fipImage fimage;
       if(fimage.load(path) )
          fimage.convertTo32Bits();
       else return false;
    
       iWidthMap = fimage.getWidth(); iLengthMap = fimage.getHeight();
       // speicher allokieren
       fHeightMap = new float* [iLengthMap];
       for(int i = 0; i < iLengthMap; i++)
          fHeightMap[i] = new float [iWidthMap];
    
       // Höhe zuweisen
       RGBQUAD *rgb_val;
       float fPixH = 0;
       for(int i = 0; i < iLengthMap; i++ )
          for( int j = 0; j < iWidthMap; j++ ) {
             if(fimage.getPixelColor(i, j, rgb_val) ) { // Absturz
                fPixH = 0.299f * (float)rgb_val->rgbBlue + 0.587f * (float)rgb_val->rgbGreen + 0.114f * (float)rgb_val->rgbRed;
                fHeightMap[i][j] = fPixH;
             }
          }
    

    hab den fehler, die programmierer machen kein objekt in ihrer funktion.



  • So auf den ersten Blick würde ich sagen, du solltest mal folgende Änderung in Erwägung ziehen.

    gentoo schrieb:

    //bild laden
    
       // Höhe zuweisen
       RGBQUAD *rgb_val = NULL;
             }
    

    gruss

    PS: auch wenn das event. nicht dein Problem löst, Variablen,Pointer,.. immer vor deren Verwendung initialisieren. Nur so ein Tip 🙂


Anmelden zum Antworten