GDI+ 90Grad Rotation und speichern

    • Offizieller Beitrag

    Mir ist gerade etwas aufgefallen, wofür ich keine echte Erklärung finde.

    Hier mal das Script:

    Das Bild ist zu groß als Anhang, deswegen auf meiner Homepage: https://technik-hobby.de/software/test_o.jpg

    So nebenbei ist mir aufgefallen, dass "_GDIPlus_ImageLoadFromFile" einen Dateilock erzeugt, der erst beim "_GDIPlus_ImageDispose" wieder entfernt wird. Man kann also das gedrehte Image nicht unter dem gleichen Namen abspeichern.

    Aber davon abgesehen, ist das eigentlich Merkwürdige, dass das Bild nach den ersten vier 90 Grad Drehungen plötzlich rund 400 KB kleiner ist.

    Ich dachte, die JPG-90-Grad-Drehung wäre verlustfrei?

    Nach weiteren vier mal 90 Grad wird es dann auch nicht mehr kleiner und das Bild sieht auch nach den 8 Drehungen noch genauso aus, wie das Original (auch in 200%-Ansicht).

    Also ist die Drehung wohl wirklich verlustfrei (was die Bilddaten betrifft). Aber was sind dann die 400 KB?

    Ok, es fehlen ein paar EXIF-Daten (kann man mit IrfanView sehen), aber das kann doch keine 400 KB ausmachen, oder?

    Ich möchte gern in meinem Programm eine Drehung der Bilder anbieten, aber ich wüsste gern, welche Daten dabei verloren gehen.

  • Aber davon abgesehen, ist das eigentlich Merkwürdige, dass das Bild nach den ersten vier 90 Grad Drehungen plötzlich rund 400 KB kleiner ist.

    Ich dachte, die JPG-90-Grad-Drehung wäre verlustfrei?

    Wie ist verlustfrei definiert? Wenn der Inhalt identisch ist, aber nicht die Dateigröße, kann dann trotzdem der Inhalt identisch sein?

    Ich sage ja, denn wenn die Differenz der Farben pro Pixel = 0 ist, dann ist das Bild identisch, und somit verlustfrei gespeichert.

    Wenn ich die Bilder per memcmp (msvcrt.dll) vergleiche (Bitmap Binärdaten), dann sind sie identisch.

    Letztendlich wird bei einer verlustfreien JPEG Rotation doch eine Veränderung in der Dateistruktur vorgenommen...

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    • Offizieller Beitrag

    Wenn ich die Bilder per memcmp (msvcrt.dll) vergleiche (Bitmap Binärdaten), dann sind sie identisch.

    Ok, das ist auch eigentlich das Wichtigste.

    Vielleicht ist es auch nur so, dass Kamera und PC unterschiedliche JPEG-"Routinen" zum speichern verwenden.

    Letztendlich wird bei einer verlustfreien JPEG Rotation doch eine Veränderung in der Dateistruktur vorgenommen...

    Ich habe jetzt noch herausgefunden, dass es gar nicht die Rotation ist. Bereits ein Laden und Speichern des Bildes bewirkt diesen "Verlust" an der Dateigröße:

    Aber im Grunde ist es egal, solange die Bilddaten vollständig erhalten bleiben. Ich setze das Thema mal auf "gelöst". Danke, für Deine Mithilfe! :)