• Moin,

    anbei ist eine 1:1 Übersetzung der C++ Implementierung von https://github.com/phoboslab/qoi/blob/master/qoi.h

    Falls ich dabei keine Abschreibefehler gemacht habe (unwahrscheinlich, aber möglich ^^) wäre das hier eine "standard" Implementierung vom QOI Dateiformat für Bilder mit Transparenz.

    Für eine anschauliche Erklärung von QOI kann ich das hier empfehlen: youtube dot com/watch?v=EFUYNoFRHQI (nicht vom Titel verwirren lassen, QOI wird hier auch behandelt)

    PS: Code ist nicht optimiert, war auch nicht das Ziel ;)

    Minimalbeispiel gibts im Anhang.

    Falls Fehler vorhanden sind, gerne hier posten bzw. Leute mit PU/Mod Rechten können für fixes auch einfach meinen Beitrag editieren 8)

    Spoiler anzeigen

    Edit: Habe mir noch ein paar Gedanken gemacht:

    Problem 1: QOI nutzt keine vertikale Ähnlichkeit von Pixeln aus.
    Potenzielle Lösung 1: Sortierte Quadtree Koordinaten (eine schnelle Methode wären z.B. Morton-Codes) statt Pixel mit x y Koordinaten.
    Erwartete Verbesserung: 5% - 30%

    Problem 2: QOI encodete Bilder sind nicht redundanzfrei und nicht musterfrei
    Potenzielle Lösung 2: Nachgeschaltetes (mini) LZSS + Nachgeschalteter (mini) Entropieencoder (mit "mini" meine ich Varianten die keine Zusatzdaten speichern, also keinen Header haben)
    Erwartete Verbesserung: 5% - 30%

    Wenn man beides macht schätze ich, dass man png in Bezug zur Kompressionsrate locker besiegen kann. (das wäre dann ohnehin sehr ähnlich zu png, wobei man darauf hofft, dass QOI hier im ersten Schritt besser performed als die Filter von png)

    lg

    M

  • Sieht fehlerfrei aus. :thumbup:

    Mittlerweile ist auch PNG in die Tage gekommen und es gibt bessere Alternativen wie WebP und Avif, die besser verlustfrei komprimieren.

    Vielleicht schreibe ich auch eine Avif DLL...

    Btw, Gimp unterstützt QOI (R/W).

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯