LoginSignup
1
2

More than 5 years have passed since last update.

[C#]デジカメで撮った写真から「カメラのモデル」を取る

Posted at

プロパティの「カメラのモデル」が欲しい

15年以上のデジカメで撮った画像ファイルが大量にありまして。
で、途中でデジカメを何回か買い替えているので、どのファイルがどのカメラで撮ったやつだ?を把握したくなり。
Windows上でプロパティ見たら、「カメラのモデル」があるわけですよ。
image.png

プロパティで見れるってことは、アプリから引っこ抜ける手があるはずで、それをいろいろやってみた次第。

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

取れた!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2