Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 290
Erhaltene Danke: 12



BeitragVerfasst: So 14.09.25 21:35 
Man sollte meinen, dass nach vielen Jahren Compilerentwicklung die unterschiedlichen jpg-Formate korrekt erkannt werden. Dies scheint bei der Vielzahl der Kamerahersteller und vielfältigen Möglichkeiten wie jpg-Header aussehen können nicht der Fall.
Ich habe ein Programm mit dem Bilder angezeigt werden (Diabetrachter). In aller Regel jpg-Dateien.
Nun erhalte ich Bilder, die mit einem iPhone aufgenommen wurden und muss feststellen, dass hochkant-fotografierte Bilder nicht automatisch gedreht werden.
Mein Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Grids,
  Vcl.Imaging.jpeg;


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
procedure TForm4.FormShow(Sender: TObject);
var jpg: TJPEGImage;
    FiName: string//Pathname
    breite,hoehe: Integer;
Begin
... // Pathnamen, die in einer StringGridliste stehen, werden in FiName geladen ( mit Taste ">" vorwärts, ">" rückwärts )
... // In Form4 (Windowsstate=wsMaximized) ist ein Objekt TImage alClient plaziert. 
... // Form4 alternativ mit oder Ohne Menü-Rand 

  Form4.Image1.Picture.LoadFromFile(FiName);  // jpg-Datei
end;

procedure TForm1.GrossbildStartMitRandClick(Sender: TObject);
begin // Bildschirm Normal mit Menü 
  // if bell then DelAlarm;
  Form4.BorderStyle := bsSizeable;
  Form4.FormStyle := fsNormal;
  Form4.Windowstate := wsMaximized;
  // SetBounds(oldX, oldY, oldW, oldH);
  Form4.Show;
  Form4.SetFocus;
end;

procedure TForm1.GrossbildStartOhneRandClick(Sender: TObject);
begin // Bildschirm VollBild 
  // if bell then DelAlarm;
  Form4.BorderStyle := bsNone;
  Form4.FormStyle := fsStayOnTop;
  Form4.BoundsRect := Monitor.BoundsRect;
  Form4.Show;
  Form4.SetFocus;
end;

Leider bringt mich die Bild-Vorababfrage nach Höhe und Breite auch nicht weiter, denn selbst bei Hochkant-Foto ist Breite > Hoehe. Auf Exit-Analyse habe ich jedoch keine Lust.
Frage: wer kann mir Code liefern, der bei allen Kameras/Handys funktioniert.
PS: arbeite mit Delphi RAD 12 (vor 3 Tagen installiert)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Gestern um 10:49 
user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
Auf Exit-Analyse habe ich jedoch keine Lust.

Du meinst sicherlich: Exif ;- )

Ohne diese wirst du aber nicht auskommen, da die Orientierung dort gespeichert ist, s. z.B. die Erklärung in JPEG Image Orientation and Exif.

PS: Dein 2. Thema habe ich gelöscht (anscheinend wolltest du editieren) und das neuere hier belassen.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 290
Erhaltene Danke: 12



BeitragVerfasst: Gestern um 12:23 
Sorry, ja natürlich Exif!
Zitat:
Ohne diese wirst du aber nicht auskommen, da die Orientierung dort gespeichert ist

Aber muss denn jeder das Rad neu erfinden? Gibt es keine fertige Routine die besser ist als LoadfromFile?. Meine Canon-Bilder werden übrigens korrekt automatisch gedreht. Die Beschäftigung mit dem jpg-Header zeigt mir eine große Spielwiese für Hersteller. Ich will doch "nur" ein Bild anzeigen", nicht bearbeiten, nicht speichern. Das sollte doch im Standard sein.
Übrigens: es gibt kaum ein Codebeispiel das ich nicht versucht habe. Keines kann ich fehlerfrei compilieren. Entweder unbekannter Typ, keine Angabe zur uses, Lazerus-Compiler notwendig, etc...
Natürlich kenne ich Irfan und verwende ihn auch selbst. Leider wird heute oft nicht mehr fotografiert, sondern geknippst. Eine Bilderflut und selten wird gelöscht. Der Vorteil meines Bildbetrachters ist: er lädt die Bilder eines oder mehrerer Verzeichnisse in eine Stringgridliste und parallel in ein Listview. Dort kann - wenn gewünscht - sortiert werden und im Stringgrid wird markiert was später als Großbild angezeigt werden soll. Alles Bestens, selbst die iPhonebilder in der Vorschau - nur eben nicht mit Loadfromfile(nnn.jpg). Bin ich der Einzige der Bilder anzeigen will?