C# Jpegの件名とコメントを編集して、エクスプローラで確認できるように書き換えたい


お世話になります。

Jpeg画像のexifタグの中の情報を書き換え、エクスプローラできちんと  
表示させるコードを書きたいと思っています。

<http://dobon.net/vb/dotnet/graphics/getexifinfo.html>

上記サイト様を見て、何とかタイトルは書き換えることに成功したのですが、  
件名とコメントの二つがどうしてもできません。

[![画像の説明をここに入力](https://i.stack.imgur.com/Y5JBw.jpg)](https://i.stack.imgur.com/Y5JBw.jpg)

調べてみたところ、idの値が、40092がコメント、40095が件名だというところまでは  
突き止めたのですが、TypeやValueの内容が解りません。

エクスプローラで表示させるには、TypeやValueにはどのようなデータを  
渡せばよいですか？そのほかにも、何かやらなければならないことが  
あるのでしょうか？

よろしくお願いいたします。




"exif 40092" で検索してみたところ、Exiv2 というC++向けのライブラリの情報が見つかりました。

<http://www.exiv2.org/tags.html>

それによると、 40092 の "Exif.Image.XPComment" と 40095 の "Exif.Image.XPSubject" はどちらも
Byte 型で、値はUCS2でエンコードされている、と書かれています。

もしくは実際にエクスプローラで書き換えてみてから、C#で情報を調べてみてもいいですね。

Byte型に相当する `PropertyInfo.Type` の値はdobon.netに書かれている通り `1`、UCS-2(UTF-16) への変換には
`Encoding.Unicode` が使えます。

以下のコードで既に設定されている「件名」を書き換えることができました。

[code]

    using (var bmp = new Bitmap(@"r:\in.jpg"))
    {
        var pi = bmp.GetPropertyItem(40095);
        pi.Value = Encoding.Unicode.GetBytes("これはテストです");
        bmp.SetPropertyItem(pi);
        bmp.Save(@"r:\out.jpg");
    }
    
[/code]

* * *

タイトルはASCIIなのに、何故件名やコメントはUCS-2なのか、という補足です。

EXIF は TIFF
という30年も前に策定された別の規格が元になっています。タグの格納方法や型、そしてタイトル（ImageDescription）をはじめとする基本的なタグ項目は
TIFF と同じものが使われています。この頃 Unicode はまだ形になっていませんでしたから、 UCS-2 なんて選択肢もないわけです。

一方で、 XPSubject や XPComment などの「XP～」というタグは WindowsXP が独自に使い始めたタグのようです。そのため現在の
Exif 2.3 の規格書にもこれらのタグは載っていません。




"exif 40092" で検索してみたところ、Exiv2 というC++向けのライブラリの情報が見つかりました。

<http://www.exiv2.org/tags.html>

それによると、 40092 の "Exif.Image.XPComment" と 40095 の "Exif.Image.XPSubject" はどちらも
Byte 型で、値はUCS2でエンコードされている、と書かれています。

もしくは実際にエクスプローラで書き換えてみてから、C#で情報を調べてみてもいいですね。

Byte型に相当する `PropertyInfo.Type` の値はdobon.netに書かれている通り `1`、UCS-2(UTF-16) への変換には
`Encoding.Unicode` が使えます。

以下のコードで既に設定されている「件名」を書き換えることができました。

[code]

    using (var bmp = new Bitmap(@"r:\in.jpg"))
    {
        var pi = bmp.GetPropertyItem(40095);
        pi.Value = Encoding.Unicode.GetBytes("これはテストです");
        bmp.SetPropertyItem(pi);
        bmp.Save(@"r:\out.jpg");
    }
    
[/code]

* * *

タイトルはASCIIなのに、何故件名やコメントはUCS-2なのか、という補足です。

EXIF は TIFF
という30年も前に策定された別の規格が元になっています。タグの格納方法や型、そしてタイトル（ImageDescription）をはじめとする基本的なタグ項目は
TIFF と同じものが使われています。この頃 Unicode はまだ形になっていませんでしたから、 UCS-2 なんて選択肢もないわけです。

一方で、 XPSubject や XPComment などの「XP～」というタグは WindowsXP が独自に使い始めたタグのようです。そのため現在の
Exif 2.3 の規格書にもこれらのタグは載っていません。

