Bildorientierung stimmt nicht

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
braunbär
Beiträge: 363
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Bildorientierung stimmt nicht

Beitrag von braunbär »

Hallo!
Ich habe folgendes Problem: Ein gewöhnliches TImage, wird via Loadfromfile geladen.
Ich habe auf der Platte mehrere verschiedene Bilder, die alle beim Laden in Irfanview richtig angezeigt werden.
Wenn ich die Bilder in meinem TImage anzeige, erscheinen manche in der richtigen Ausrichtung, und manche werden um 90° gedreht angezeigt. Woran kann das liegen?

Benutzeravatar
theo
Beiträge: 8539
Registriert: Mo 11. Sep 2006, 19:01

Re: Bildorientierung stimmt nicht

Beitrag von theo »


braunbär
Beiträge: 363
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Bildorientierung stimmt nicht

Beitrag von braunbär »

Danke, jetzt habe ich zumindest eine Erklärung für das Problem, aber noch keine Lösung:
Wenn ich in Irfanview die Feature "bild automatisch entsprechend den EXIF Daten drehen" abschalte, dann erscheinen die Bilder, die in meinem Programm falsch angezeigt werden, auch in Irfanview falsch, d.h. dass das TImage sich um diese EXIF Daten nicht kümmert (und ich sehe im OI auch keine Property, mit der man das aktivieren könnte.
Gibt es eine einfache Methode, um in Lazarus ein JPG Bild (TPicture) um 90° zu drehen? In einem anderen Thread viewtopic.php?f=12&t=10516 habe ich gefunden, wie ich die EXIF Daten auslesen kann, aber wie ich das Bild dann drehen kann, ist mir nicht klar.
Übrigens, auch der Versuch, die falsch angezeigten Bilder einfach im Irfanview um 90° zu drehen, bringt nichts, da dürfte Irfanview vermutlich nur genau die EXIF Daten manipulieren, die das TImage gnadenlos ignoriert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4373
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Bildorientierung stimmt nicht

Beitrag von af0815 »

Bild in einem Bildbearbeitungsprogramm laden und dort rotieren und dann zurückspielen.

Es ist gut, das TImage nicht die EXIF Daten interprtiert, das ist auch nicht die Aufgabe von TImage. Du kannst ja die EXIF Daten laden und dann das Bild eintsprechend drehen. Siehe U.A. viewtopic.php?f=18&t=8378
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 8539
Registriert: Mo 11. Sep 2006, 19:01

Re: Bildorientierung stimmt nicht

Beitrag von theo »

@braunbär: Ein bisschen suchen hilft manchmal.
Z.B. hier:
https://sourceforge.net/p/lazarus-ccr/s ... dvmain.pas
(Von mir nicht getestet)

wp_xyz
Beiträge: 3462
Registriert: Fr 8. Apr 2011, 09:01

Re: Bildorientierung stimmt nicht

Beitrag von wp_xyz »

Bei jpg-Bildern ist der von theo verlinkte Code allerdings nur für die Anzeige geeignet; das Bitmap sollte nicht als jpg codiert in eine Datei geschrieben werden, weil die erneute Komprimierung mit Qualitätsverlust verbunden ist. Es gibt allerdings auch verlustfreie jpg-Rotationen, die man sich z.B. über die FreeImage-Bibliothek durchführen lassen kann (https://forum.lazarus.freepascal.org/in ... #msg173182); eine eigenständige FPC/Lazarus-Implementierung habe ich allerdings noch nicht gesehen.

Benutzeravatar
theo
Beiträge: 8539
Registriert: Mo 11. Sep 2006, 19:01

Re: Bildorientierung stimmt nicht

Beitrag von theo »

@wp_xyz: Das stimmt technisch. Inwiefern das für einen Anwendungsfall relevant ist, ist eine andere Frage.
Zum "Normalisieren" würde ich die LCL aber auch nicht nutzen.
Idealerweise würde man die Bilder vor dem Laden in die richtige Orientierung bringen, mit einem Tool, welches dies verlustfrei erledigt..
Das Drehen braucht ja auch ordentlich Rechenzeit. Das ist auch der Grund, warum Kameras lieber einen Orientierungs-Tag schreiben, als das Bild "wirklich" zu drehen.

Benutzeravatar
Winni
Beiträge: 503
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.06, fpc 3.04
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Bildorientierung stimmt nicht

Beitrag von Winni »

Hi!

JPEG image in eine TBGRAbitmap laden.
Verlustfrei 90° drehen.
Vor dem Speichern JPG-Kompression auf 100% setzen.
Speichern.

Vorher in der Kamera die Kompressionsrate auf 0% (manchmal nennen sie das auch 100%) setzen.

Und nachsehen, ob die Kamera auch ein verlustfreies Format anbietet, z.B TIFF oder PNG.
TIFF war früher fast Standard.

Winni

Benutzeravatar
theo
Beiträge: 8539
Registriert: Mo 11. Sep 2006, 19:01

Re: Bildorientierung stimmt nicht

Beitrag von theo »

@Winni: Leicht off-topic, aber TIFF ist ein sehr komplexes Ding und kann alles Mögliche enthalten.
U.A. auch "lossy compression", z.B. JPEG.
https://www.awaresystems.be/imaging/tif ... ssion.html
https://en.wikipedia.org/wiki/TIFF

Benutzeravatar
Winni
Beiträge: 503
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.06, fpc 3.04
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Bildorientierung stimmt nicht

Beitrag von Winni »

Hi Theo!

Das weiss ich. Hab vor n paar Wochen im internationalen Forum darüber debattiert.

Ich hab so 86/87 nen Tiff-Reader geschrieben.
Der ist leider zusammen mit meiner abgerauchten Atari-Festplatte ins Nirvana entschwunden.

Man kann mit TIFF viele Nettigkeiten veranstalten, auf die 50% der Sofzware nicht eingestellt ist:
z.B. 0/0 nach rechts unten legen. Ergibt in so manchem Bildbetrachter ein doppelt gespiegeltes Bild ....

Winni

braunbär
Beiträge: 363
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Bildorientierung stimmt nicht

Beitrag von braunbär »

Danke für die Antworten, das funktioniert jetzt wie es soll.

Antworten