Der Martin: JPEG-Bilder verlustfrei drehen (on-the-fly)

Beitrag lesen

Hi,

Ah ja, die gdlib arbeitet grundsätzlich so: Das Bild laden, dekomprimieren, bearbeiten, dann neu komprimieren. Erfüllt also nicht die Anforderungen des OP.
Bist du da sicher - bzw. was verstehst du unter dekomprimieren?

ja, bin ich. Die gdlib arbeitet intern immer mit unkomprimierten Bilddaten, ganz ähnlich wie ein Windows-BMP, so dass jedes Pixel einzeln adressiert und manipuliert werden kann. Das heißt, komprimierte Formate wie GIF, PNG oder JPEG werden komplett decodiert und stehen erst dann zur Bearbeitung zur Verfügung. Daher braucht beispielsweise ein JPEG mit 400x300 Pixel Größe auch 400*300*3 Bytes im Speicher (also knapp 400kB), auch wenn die JPEG-Datei nur 21kB groß ist.

Um ein JPEG verlustfrei zu drehen ist es erforderlich, die Kompression rückgängig zu machen (sprich den exakten Algorithmus verkehrt herum auszuführen)

Nicht ganz. Ich habe den JPEG-Kompressionsalgorithmus noch nicht in allen Einzelheiten verstanden, aber die Bildinformation *innerhalb* eines 8x8 großen Blocks lässt sich AFAIK tatsächlich verlustfrei decodieren und wieder neu codieren. Der Informationsverlust findet bei der Erzeugung der 8x8-Blöcke statt.
Verlustfreies Drehen heißt also:
 * Jeden 8x8-Block in sich drehen, das geht verlustfrei
 * Die Gesamtanordnung der Blöcke drehen, geht auch verlustfrei

das JPEG einfach in eine Rastergrafik lesen führt ggf. zu einem abweichenen Ergebnis.

Abweichend wovon? - Bei JPEG gilt dasselbe wie bei MPEG (und davon abgeleitet auch bei mp3-Audio): Die Decodierung bzw. Dekompression einer vorliegenden Datenmenge ist ein mathematisch exakter Vorgang und muss unabhängig vom verwendeten Weg immer dasselbe Ergebnis liefern, sonst ist der Algorithmus fehlerhaft.

So long,
 Martin

--
Auch mit eckigen Radios kann man Rundfunk hören.