【问题标题】:Why does System.Drawing.Image.GetPropertyItem behave differently on Windows XP / 2003 compared to Windows 7为什么 System.Drawing.Image.GetPropertyItem 在 Windows XP / 2003 上的行为与 Windows 7 不同
【发布时间】:2013-10-29 22:42:46
【问题描述】:

我正在尝试使用 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 个属性,其中一个是 0x0112。

我怀疑这可能与 Vista 和更高版本的 Windows 具有更新版本的 GDI+ 有关。有什么方法可以让它在 Windows XP / 2003 上运行,而无需编写代码来读取和写入 Exif 数据?

【问题讨论】:

    标签: c# system.drawing


    【解决方案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);
    

    我使用 .Net 4 在 Windows XP 32 位 SP3 上使用 this image 对此进行了测试,它返回的方向为 1,这似乎是正确的。

    【讨论】:

    • ExifReader 有效。不过,我很想知道为什么行为会有所不同。
    • 这是一个有用的答案 (+1),但它没有解决 OP 的问题 (-1)。
    猜你喜欢
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 2010-11-12
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    相关资源
    最近更新 更多