Lesen einer JPEG2000-Datei



  • Hallo,

    habe versucht mittels fstream eine JPEG200 Datei auszulesen. Funktioniert aber leider nicht. Bekomme immer die länge 0 zurück. Weiß jemand was ich falsch mache?

    std::ifstream file;
    file.open("city.jp2", std::ios_base::binary | std::ios_base::in);
    
    if (file.good() == false || file.eof() == true || file.is_open() == false)
        return false;
    
    file.seekg(0, std::ios_base::beg);
    std::ifstream::pos_type begin_pos = file.tellg();
    file.seekg(0, std::ios_base::end);
    int len = static_cast<int>(file.tellg() - begin_pos);
    file.seekg(0, std::ios_base::beg);
    
    std::cout << len << std::endl;
    
    char* buffer = new char[len];
    file.read(buffer, len);
    
    if (file.good() == false)
        return false;
    
    // Hier kannst de alles im Buffer nutzen ...
    file.close();
    
    delete [] buffer;
    

    Danke!
    mfg,
    Shed



  • Hi!

    #include <iostream>
    #include <fstream>
    
    int main()
    {
        using namespace std;
        ifstream file;
        streamoff len;
    
        file.open("city.jp2", std::ios_base::binary | std::ios_base::ate); 
        if (file.fail()) return -1;
    
        len = file.tellg();
        file.seekg(0, ios_base::beg );
    
        cout << len << std::endl; 
    
        char* buffer = new char[len]; 
        file.read(buffer, len); 
    
    // Hier kannst de alles im Buffer nutzen ... 
        file.close(); 
    
        delete [] buffer;   
    }
    

    🙂



  • Hmm der Code den shed gepostet hat, ist eig nicht falsch ... denn er hat erst einen anderen Code in einem anderen Forum gepostet und ich hab ihm dann diesen Code gegeben ^^



  • (D)Evil schrieb:

    Hmm der Code den shed gepostet hat, ist eig nicht falsch ... denn er hat erst einen anderen Code in einem anderen Forum gepostet und ich hab ihm dann diesen Code gegeben ^^

    Stimmt, sein (dein) Code funktioniert - entweder die Datei die er öffnen will ist leer oder er macht einen Fehler beim Dateinamen bzw.
    der Dateipfad ist falsch. Satt "city.jp2" "c:\\city.jp2" oder was anderes? 😞



  • file.seekg(0, std::ios_base::end); 
    std::ifstream::pos_type begin_pos = file.tellg();
    file.seekg(0, std::ios_base::beg);
    

    sorum ist es richtig.



  • tellg() liefert dir den offset an der stelle auf die der fileptr zeigt.
    normal wäre das auf den anfang des buffers und du bekommst 0
    also musst du ihn erst mittels file.seekg(0, std::ios_base::end); auf den ende des buffers setzten.



  • @krabbels: Gestatte mir bitte die Frage warum in Deinen Augen die als begin_pos benannte Position am Ende der Datei liegen müsste? 😃
    *scnr*



  • krabbels schrieb:

    also musst du ihn erst mittels file.seekg(0, std::ios_base::end); auf den ende des buffers setzten.

    und das kannste dir sparen, indem du die Datei mit std::ios_base::ate öffnest 😉



  • argh die hälfte übersehen 😕
    sorry



  • Danke (D)Evil dein Source-Code funktioniert. 🙂
    Hab mich nur vertippt.


Anmelden zum Antworten