Bildbreite, Bildhöhe

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Bildbreite, Bildhöhe

Beitrag von jear »

Stehe mächtig auf dem Schlauch. Habe seit Jahren eine Anwendung in Betrieb, mit der ich im Hochformat (Portrait) aufgenommene Fotos erkenn und entsprechend behandele. Klappt einfach nicht mehr. Ich nutze PB 5.50 (x64). Kamera ist eine Lumix FZ200.

Nachfolgender Code sowie IrfanView bringen das im nachfolgenden Bild dargestellte Ergebnis. Die in grüner Schrift eingefügten Daten gibt PB aus. Das Bild ist eindeutig im Hochformat aufgenommen und wird von Irfan auch so angezeigt.

Wenn ich ein solches Bild per ResizeImage verkleinere und per SaveImage speichere wird es zum liegenden Bild im Querformat. Was kann da los sein?

Code: Alles auswählen

UseJPEGImageDecoder()

Im.s = "Test4.jpg" : 
LoadImage(0, Im, 0)

Debug Im
IW.i = ImageWidth(0) : Debug "B: " + IW
IH.i = ImageHeight(0) : Debug "H: " + IH
IRatio.f = IW/IH : Debug "R: " + StrF(IRatio, 2)

If IRatio < 1.0
  Debug "Portrait" 
Else
  Debug "Landscape"
EndIf

FreeImage(0)

End
Ergebnisse:

[img]
http://www.kayhausen.de/PB/Test4_Info.jpg
[/img]
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Bildbreite, Bildhöhe

Beitrag von udg »

ich habe es mal in die Version 5.30 x86 und v 5.43 LTS x86 geladen

in beiden zeigt das Debug korrekte Werte an:

Bild
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: Bildbreite, Bildhöhe

Beitrag von Pelagio »

Guten Morgen jear,


ich habe Dein Beispiel mal mit PB 5.51(x86) durchgespielt und
habe die korrekten Daten, aus den Eigenschaften, auslesen können.

Code: Alles auswählen

UseJPEGImageDecoder()
UseJPEGImageEncoder()

#FileID = 11
#KopieID = 99
Global gFile.s  = "Test4.jpg"
Global gKopie.s = "Kopie.jpg"

Procedure.f Anzeige(vID.i)
	Protected pWidth.i, pHeight.i, pRatio.f

	Debug gFile
	pWidth  = ImageWidth (vID) : Debug "B: " + pWidth
	pHeight = ImageHeight(vID) : Debug "H: " + pHeight
	pRatio  = pWidth/pHeight : Debug "R: " + StrF(pRatio, 2)
	ProcedureReturn pRatio
EndProcedure

LoadImage(#FileID, gFile)
If (Anzeige(#FileID)<1.0)
	Debug "Portrait"
Else
	Debug "Landscape"
EndIf

ResizeImage(#FileID, 4000, 2248)
SaveImage(#FileID, gKopie, #PB_ImagePlugin_JPEG)

LoadImage(#KopieID, gKopie)
If (Anzeige(#KopieID)<1.0)
	Debug "Portrait"
Else
	Debug "Landscape"
EndIf

FreeImage(#PB_All)

End
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

Re: Bildbreite, Bildhöhe

Beitrag von alter Mann »

Integerdivision ?

Code: Alles auswählen

Define I1.i,I2.i,F.f

I1 = 5
I2 = 3

Debug I1/I2

F = i1

Debug StrF(F/I2)
Win11 64Bit / PB 6.0
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: Bildbreite, Bildhöhe

Beitrag von Pelagio »

Hallo alter Mann,

ich verstehe nicht worauf sich Deine Frage bezieht,
Teile ich zwei Integer und gebe das Ergebnis in eine Float (Double) so wird auch eine Float ausgegeben.

Code: Alles auswählen

Define I1.i,I2.i,F.f

I1 = 5
I2 = 3

F = I1/I2
Debug StrF(I1/I2)
Debug F
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Re: Bildbreite, Bildhöhe

Beitrag von jear »

In grauer Vorzeit hatte PB tatsächlich Probleme mit dem Casting!

Das Problem mit den Bildern hat wohl andere Ursachen. Offenbar kümmern sich JPEGImageDecoder und JPEGImageEncoder nicht um das Orientation-Flag (EXIF). Meine Kamera gibt den Hochformat-Bilder ein "Left Bottom", den Breitformat-Bildern aber ein "Left Top" mit. Dieses Flag müsste beim Decodieren/Encodieren beachtet werden.

Wenn ich den Code von Pelagio bei solchen Bildern benutze, kommt völliger Unsinn heraus.

Beispielbilder:

Hochformat http://www.kayhausen.de/PB/Test5_Info.jpg

Breitformat http://www.kayhausen.de/PB/Test6_Info.jpg
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Re: Bildbreite, Bildhöhe

Beitrag von jear »

Inwischen ist es mir gelungen, IrfanView per Commandline Options zur richtigen Convertierung der Bilder zu nutzen. Dabei bleiben die EXIF-Daten erhalten, die Orientierung wird auf "Top Left" vereinheitlicht und ich kann einen ganzen Ordner mit Bildern bearbeiten lassen, indem ich dessen Inhalt in einer "Filelist" zusammenstelle.

Es bleibt aber der Wunsch, dass JPEGImageDecoder und JPEGImageEncoder irgendwann die Orientierung eines Bildes beachten.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Antworten