4 Stimmen

Warum verhält sich System.Drawing.Image.GetPropertyItem auf Windows XP/2003 anders als auf Windows 7?

Ich versuche, den Wert der Ausrichtungs-Exif-Werte mithilfe von System.Drawing.Image.GetPropertyItem(0x0112) zu lesen.

Dies funktioniert einwandfrei unter Windows 7 und Windows 2008 R2, scheitert jedoch unter Windows XP / Windows Server 2003 (Fehlermeldung 'Eigenschaft konnte nicht gefunden werden').

Unter Windows XP / 2003 erhalte ich beim Iterieren über die verfügbaren Eigenschaften (unter Verwendung der PropertyItems-Eigenschaft von System.Drawing.Image) nur 0x5090 (PropertyTagLuminanceTable) und 0x5091 (PropertyTagChrominanceTable).

Mit dem genau gleichen Bild in Windows 7 / Windows 2008 erhalte ich 18 Eigenschaften, eine davon ist 0x0112.

Ich vermute, dass dies damit zusammenhängt, dass Vista und spätere Versionen von Windows eine neuere Version von GDI+ haben. Gibt es eine Möglichkeit, dass dies unter Windows XP / 2003 funktioniert, ohne den Code schreiben zu müssen, um Exif-Daten auf die harte Tour zu lesen und zu schreiben?

1voto

JMK Punkte 25981

Es gibt eine Bibliothek auf NuGet namens ExifReader und einen begleitenden CodeProject-Artikel hier.

Der folgende Code sollte für das Abrufen der Orientierung funktionieren, und Sie können die anderen Aufzählungen von ExifTags verwenden, um andere Metadatenstücke zu erhalten:

object result;

var reader = new ExifReader("c:\\temp\\test\\sample.jpg");
reader.GetTagValue(ExifTags.Orientation, out result);

var orientation = Convert.ToInt32(result);

Ich habe dies mit diesem Bild unter Windows XP 32-Bit SP3 mit .Net 4 getestet, und es hat eine Orientierung von 1 zurückgegeben, was korrekt zu sein scheint.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X