プロパティの「カメラのモデル」が欲しい
15年以上のデジカメで撮った画像ファイルが大量にありまして。
で、途中でデジカメを何回か買い替えているので、どのファイルがどのカメラで撮ったやつだ?を把握したくなり。
Windows上でプロパティ見たら、「カメラのモデル」があるわけですよ。
プロパティで見れるってことは、アプリから引っこ抜ける手があるはずで、それをいろいろやってみた次第。
Image.PropertyItemsを参照する
マイクロソフトのページを見た感じ、
この列挙体の中にいる模様。
ってことは、Imageクラス作ってあげれば、参照できるってことですな。
idはいくつ?
・・・が、わからない点が。idっていくつなのだ?
なので、またマイクロソフトのページを参照。
わかるようなわからないような。仕方ないので、全部引っこ抜いてみた。
Test.cs
string imgFile = "D:\\IMG_6473.JPG";
using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(imgFile))
{
foreach (System.Drawing.Imaging.PropertyItem item in bmp.PropertyItems)
{
//データの型を判断
if (item.Type == 2)
{
//ASCII文字の場合は、文字列に変換する
string val = System.Text.Encoding.ASCII.GetString(item.Value);
val = val.Trim(new char[] { '\0' });
//表示する
Console.WriteLine("{0:X}:{1}:{2}", item.Id, item.Type, val);
}
}
}
//結果
10E:2:
10F:2:Canon
110:2:Canon PowerShot SX710 HS
132:2:2018:01:01 08:05:18
9003:2:2018:01:01 08:05:18
9004:2:2018:01:01 08:05:18
9290:2:09
9291:2:09
9292:2:09
5041:2:R98
A430:2:
というわけで、id=0x0110が当たりと判明!
データを取ってみる。
ImageUtil.cs
string imgFile = "D:\\IMG_6473.JPG";
using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(imgFile))
{
var item = bmp.PropertyItems.FirstOrDefault(v => v.Type == 2 && v.Id == 0x0110);
if (item != null)
{
//ASCII文字の場合は、文字列に変換する
string val = System.Text.Encoding.ASCII.GetString(item.Value);
val = val.Trim(new char[] { '\0' });
//表示する
Console.WriteLine("{0:X}:{1}:{2}", item.Id, item.Type, val);
}
}
//結果
110:2:Canon PowerShot SX710 HS
取れた!