Fehlermeldung mit TMemoryStream und TJPGImage, brauche Hilfe



  • Hallo,

    bei dieser Version bekomme ich eine Exception: JPG Error #41 !?!

    {
    TJPEGImage *jpg = new TJPEGImage();
    TMemoryStream *Stream = new TMemoryStream();

    //... Stream wird per Schnittstelle mit JPG-Datei gefüllt

    jpg->LoadFromStream(Stream);
    Image1->Picture->Assign(jpg);

    ...
    }

    wenn ich den Stream kurz auf die Platte speichere und wieder lade, dann funktioniert es !?!

    {
    TJPEGImage *jpg = new TJPEGImage();
    TMemoryStream *Stream = new TMemoryStream();

    //... Stream wird per Schnittstelle mit JPG-Datei gefüllt

    Stream->SaveToFile("hans.jpg");
    jpg->LoadFromFile("hans.jpg");
    Image1->Picture->Assign(jpg);

    ...
    }

    Hat jemand eine Erklärung dafür ??

    Gruß
    Franc



  • Hallo,

    Hast du vor dem Laden mit jpg->LoadFromStream(Stream); die StreamPosition auf 0 zurückgesetzt? Also mit Stream->Position = 0;



  • du musst die Position des Streams zuruecksetzen! Beim Schreiben in einen Stream wird der Positionszeiger auf die zuletzt geschriebene Position im Stream gesetzt. Wenn du dann versuchst den Stream zu laden, greifst du natürlich ins Leere.

    Beispiel: Object stellt die Schnittstelle dar, aus der die Daten kommen

    TMemoryStream *Stream = new TMemoryStream();
    TJPEGImage    *JPEG   = new TJPEGImage();
    
    // Stream mit Daten fuellen
    Stream->Write(Object.Data, Object.Size);
    Stream->Position = 0; // Wichtig!!!
    
    JPEG->LoadFromStream(Stream);
    
    Image->Picture->Assign(JPEG);
    Application->ProcessMessages();
    
    delete Stream;
    delete JPEG;
    


  • DANKE DANKE für die schnelle Hilfe !!!

    Ist eigentlich logisch, wäre ich aber nicht von alleine darauf gekommen.

    Nochmals Danke !!!

    Gruß Franc


Anmelden zum Antworten