2013-10-29 27 views
4

我正在尝试使用System.Drawing.Image.GetPropertyItem(0x0112)读取Exif值的方向。为什么System.Drawing.Image.GetPropertyItem在Windows XP/2003上的行为与Windows 7相比有所不同

这适用于Windows 7和Windows 2008 R2,但在Windows XP/Windows Server 2003上失败(获取'Property Can not Be Found'错误)。

在Windows XP/2003中,如果我遍历可用的属性(使用PropertyItems System.Drawing.Image对象的属性),我只得到0x5090(PropertyTagLuminanceTable)和0x5091(PropertyTagChrominanceTable)

使用完全相同图像在Windows 7/Windows 2008中,我得到18个属性,其中之一是0x0112。

我怀疑这可能与Vista和更高版本的Windows有更新版本的GDI +有关。有没有什么办法可以让Windows XP/2003在不用写代码的情况下读写Exif数据?

回答

1

NuGet上有一个库叫做ExifReader和一个附带的CodeProject文章here

下面的代码应适用于获得的方向,并且可以使用ExifTags的其他枚举得到其他部分的元数据:

object result; 

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

var orientation = Convert.ToInt32(result); 

我与this image在Windows XP 32位SP3测试这使用.Net 4,它返回了1的方向,这看起来是正确的。

+0

ExifReader的工作原理。我很想知道为什么行为有差异。 – tardomatic

+0

这是一个有用的答案(+1),但它没有解决OP的问题(-1)。 – stakx

相关问题