4

System.Drawing.Image.GetPropertyItem(0x0112) を使用して向きの Exif 値を読み取ろうとしています。

これは、Windows 7 および Windows 2008 R2 では正常に機能しますが、Windows XP / Windows Server 2003 では失敗します (「プロパティが見つかりません」というエラーが発生します)。

Windows XP / 2003 で、(System.Drawing.Image の PropertyItems プロパティを使用して) 利用可能なプロパティを反復処理すると、0x5090 (PropertyTagLuminanceTable) と 0x5091 (PropertyTagChrominanceTable) しか得られません。

Windows 7 / Windows 2008 でまったく同じイメージを使用すると、18 個のプロパティが取得され、そのうちの 1 つが 0x0112 です。

これは、Vista およびそれ以降のバージョンの Windows に新しいバージョンの GDI+ が搭載されているという事実に関連している可能性があると思われます。これを Windows XP / 2003 で動作させる方法はありますか? Exif データを読み書きするためのコードを難しい方法で書く必要はありませんか?

4

1 に答える 1

1

ExifReaderと呼ばれる NuGet のライブラリと、付随する CodeProject の記事がここにあります

次のコードは向きを取得するために機能するはずであり、ExifTags の他の列挙を使用して他のメタデータを取得できます。

object result;

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

var orientation = Convert.ToInt32(result);

.Net 4 を使用して Windows XP 32 ビット SP3でこのイメージをテストしたところ、正しいように見える 1 の方向が返されました。

于 2013-10-29T14:30:36.427 に答える