Introduction

備忘録。
JPEG ファイルなどに含まれる EXIF には回転情報 (Orientation、IFD0 タグ 0x0112) は、画像をどのように補正すれば正しい向きになるか、というメタデータである。
この情報を .NET.NET Framework の標準 API で取り扱えるが、Windows のバージョンによって結果が異なってしまう。

What happened?

具体的には Windows 11 24H2 の初期ビルドからビルド番号 26100.2454 未満の間で発生する。
修正プログラム KB5046740 によって ビルド番号 26100.2454 に更新される際、下記の問題が直ることが確認できる。

KB5046740

この問題は EXIF data misreading in WinForms VB application on Windows 11 24H2 #12338 として Issue があがっている。
Windows Imaging Component (WIC) のバグのようで、上述のようにすでに直っているのだが Close されていない。

状況を再現するソースは下記。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
using System.Drawing;

using ExifLib;
using NLog;

namespace Demo
{

internal sealed class Program
{

#region Fields

private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

#endregion

#region Methods

private static void Main(string[] args)
{
if (args.Length != 1)
{
Logger.Error("Usage: Demo.exe </path/to/image/file>");
return;
}

var inputPath = args[0];
using (var reader = new ExifReader(inputPath))
{
if (reader.GetTagValue(ExifTags.Orientation, out ushort value))
Logger.Info($"ExifLib found Orientation Tag: {value}");
else
Logger.Info("ExifLib does not find Orientation Tag");
}

using (var original = new Bitmap(inputPath))
{
try
{
var item = original.GetPropertyItem((int)ExifTags.Orientation);
var value = BitConverter.ToInt16(item.Value, 0);
Logger.Info($"System.Drawing found Orientation Tag: {value}");
}
catch (Exception e)
{
Logger.Info("System.Drawing does not find Orientation Tag");
}
}
}

#endregion

}

}

ExifLib という OSS と .NET の標準 API で回転情報を表示する処理を示す。

入力画像はいずれも Y 軸で反転した鏡写しのアフィン変換の回転情報が付与されているものを使っている。

Windows 11 23H2 22631.5768

再現プログラム、Explorer の Orientation 列共に問題ない結果。

Windows 11 23H2 22631.5768

Windows 11 24H2 26100.1742

手元に 24H2 の初期ビルドがなかったで中途半端なビルドだが、Explorer の Orientation 列は問題なくとも、再現プログラム側で標準 API での取得ができなくなっている。

Windows 11 24H2 26100.1742

Windows 11 24H2 26100.2454

修正プログラム KB5046740 適用後。
再現プログラム、Explorer の Orientation 列共に問題ない結果。

Windows 11 24H2 26100.2454