JPEG Bilder die 2te



  • Das ist ja schön und gut mit dem new. Allerdings mach ich doch den delete also ist doch alles ok? Ansonsten wollte ich eigentlich nur mal wissen ob mein Gedenken weg da logisch ist oder ob das Quark ist.

    Das mit dem const char sehe ich ein, hab ich auch geändert. 😉



  • In C++ verwaltet man Speicher sehr selten manuell -- new , new[] , delete und delete[] trifft man in gutem Code nicht häufig an. Oder vielleicht noch new , aber nicht die anderen.

    Schau dir dazu mal das RAII-Idiom an. Grundsätzlich geht es darum, dass Objekte selbstständig für ihre Ressourcen (einschliesslich Speicher) zuständig sind. Statt eines ImgFile* könnte man Smart-Pointer wie std::unique_ptr<ImgFile> verwenden, oder noch besser direkt ImgFile . Wozu brauchst du den Zeiger?



  • Nexus schrieb:

    In C++ verwaltet man Speicher sehr selten manuell -- new , new[] , delete und delete[] trifft man in gutem Code nicht häufig an. Oder vielleicht noch new , aber nicht die anderen.

    Ok danke für die erklärung.

    Nexus schrieb:

    Schau dir dazu mal das RAII-Idiom an. Grundsätzlich geht es darum, dass Objekte selbstständig für ihre Ressourcen (einschliesslich Speicher) zuständig sind. Statt eines ImgFile* könnte man Smart-Pointer wie std::unique_ptr<ImgFile> verwenden, oder noch besser direkt ImgFile . Wozu brauchst du den Zeiger?

    Ok das mit dem Smart-Pointer schau ich mir an.
    ImgFile liefert mir das JPEG Bild. D.h. das ist eine eigene Klasse. Meinst du mit direkt ImgFile zu benutzen, dass ich das vererben soll? Ansonsten hab ich das grade nicht verstanden.



  • Nein, er meinte so etwas:

    class foo {};
    clss bar {foo f;}
    


  • Nein, vererben nicht, komponieren sollst du.

    class A
    { };
    
    class B
    {
        A my_a; // das meint er, das nennt man Komposition
    };
    // B "hat-ein" A
    
    class Base
    { };
    
    class Derive : public Base // das ist Vererbung, etwas ganz anderes
    { };
    // Derive "ist-ein" Base
    


  • Enno schrieb:

    ImgFile liefert mir das JPEG Bild. D.h. das ist eine eigene Klasse. Meinst du mit direkt ImgFile zu benutzen, dass ich das vererben soll? Ansonsten hab ich das grade nicht verstanden.

    Nein, du schreibst ja auch

    int i = 5;
    

    und nicht

    int* i = new int(5);
    

    Wenn du keine dynamische Speicherverwaltung brauchst, benutze sie nicht. In deinem Fall solltest du die Konstruktor-Initialisierungsliste verwenden.

    class Start
    {
    public:
        Start();
        // kein Destruktor mehr notwendig
    private:
        ImgFile imgFile;
    };
    
    Start::Start()
    : imgFile() // <- hier könnte man Argumente an den ImgFile-Konstruktor übergeben
    {
        // eigentlicher Konstruktorrumpf
        // keine Zuweisungen hier!
    }
    


  • Ok allerdings kommt das für mich irgendwie auf das gleiche raus ob ich nun ein Pointer auf das Objekt mache oder das Objekt direkt anspreche.

    Meine eigentlich frage ist nicht auf das new bezogen sondern ob das generell Quark ist oder ob mein angehen jetzt in die richtige Richtung geht.



  • Ja, ist Quark.
    Du brauchst überhaupt keinen Pointer und kannst einfach mit . auf die Member zugreifen.
    Ein Pointer ist hier absolut überflüssig.



  • Nathan schrieb:

    Ja, ist Quark.
    Du brauchst überhaupt keinen Pointer und kannst einfach mit . auf die Member zugreifen.
    Ein Pointer ist hier absolut überflüssig.

    Es geht gar nicht um den Pointer mehr! Das hab ich ja schon jetzt grade oft genug verstanden. Danke.



  • Schreib doch erstmal nen Loader für unkomprimierte TGA-Bilder.
    Den Code kannst du praktisch zu 90% übernehmen und du hast nur minimal Zusatzarbeit gemacht, weißt aber wie die absoluten Basics von JPEG funktionieren.



  • @Enno:
    Ach so, tschuldigung, habe dich falsch verstanden.



  • Ethon schrieb:

    Schreib doch erstmal nen Loader für unkomprimierte TGA-Bilder.
    Den Code kannst du praktisch zu 90% übernehmen und du hast nur minimal Zusatzarbeit gemacht, weißt aber wie die absoluten Basics von JPEG funktionieren.

    Hast du alles gelesen? Dann wüsstest du das ich das nicht machen will sondern gleich dabei bleibe.
    Trotzdem danke für den Tipp ich weis das zu schätzen.

    Nathan schrieb:

    @Enno:
    Ach so, tschuldigung, habe dich falsch verstanden.

    Und die Anfänger müssen sich immer anhören das sie richtig lesen soll. 🤡
    Ne ist ja kein Problem. 😉



  • Enno schrieb:

    Ethon schrieb:

    Schreib doch erstmal nen Loader für unkomprimierte TGA-Bilder.
    Den Code kannst du praktisch zu 90% übernehmen und du hast nur minimal Zusatzarbeit gemacht, weißt aber wie die absoluten Basics von JPEG funktionieren.

    Hast du alles gelesen? Dann wüsstest du das ich das nicht machen will sondern gleich dabei bleibe.
    Trotzdem danke für den Tipp ich weis das zu schätzen.

    Das würde ich metaphorisch verpacken als "Ich baue kein Rad, sondern gleich ein Auto, das 4 Räder hat". Aber naja, dein Bier, viel Erfolg. 😉



  • Danke



  • Hey Leute,
    ich habe mich nun weiter durch gekämpft. Bin auch gut voran gekommen.
    Meine Frage:
    Muss man sich für verschiedene JPEG Bilder immer neue Quantisierungstabellen errechnen oder kann man dafür auch feste(also const) Tabellen nehmen?

    Ich meine sowas:

    //luminocity quantanization table
    static const int lqt[64]{2, 1, 1, 2, 3, 5, 6, 7,
              1, 1, 2, 2, 3, 7, 7, 7,
              2, 2, 2, 3, 5, 7, 8, 7,
              2, 2, 3, 3, 6, 10, 10, 7,
              2, 3, 4, 7, 8, 13, 12, 9,
              3, 4, 7, 8, 10, 12, 14, 11,
              6, 8, 9, 10, 12, 15, 14, 12,
              9, 11, 11, 12, 13, 12, 12, 12};
    
    //chromaticity quantanization table
    static const int cqt[64]{2, 2, 3, 6, 12, 12, 12, 12,
              2, 3, 3, 8, 12, 12, 12, 12,
              3, 3, 7, 12, 12, 12, 12, 12,
              6, 8, 12, 12, 12, 12, 12, 12,
              12, 12, 12, 12, 12, 12, 12, 12,
              12, 12, 12, 12, 12, 12, 12, 12,
              12, 12, 12, 12, 12, 12, 12, 12,
              12, 12, 12, 12, 12, 12, 12, 12};
    


  • ...



  • Swordfish schrieb:

    Die ganze Kacke steht doch eh in CCITT/ITU T.81!?

    Geile Antwort. 😉 Das steht auch alles in meinem Buch! Antwort auf meine Frage ist das trotzdem nicht.



  • ...



  • Ich hab da mal rein geluschert udn auf meine spezielle Frage keine Antwort gefunden. Darfst mir gerne verraten wo das steht.


  • Mod

    Enno schrieb:

    Ich hab da mal rein geluschert

    Dir wurde hier wieder und wieder gesagt, dass du dich mit deinem Projekt vollkommen übernimmst. Du hast wieder und wieder versichert, dass du dich unbedingt durchbeißen möchtest. Und jetzt bist du zu unkonzentriert/faul, die grundlegende Beschreibung des Formates gründlich durchzulesen?

    Ich weiß wirklich nicht, wie man dir noch helfen soll...


Anmelden zum Antworten