|
カメラは持ってないので、Win7 SP1で適当なpngファイルをMS Paintでtiffに保存しなおし、
Explorerを使ってプロパティ>詳細から撮影日時を設定して、ファイルを観察しました。
タグID 0x9003は存在していますが、これはTIFFタグとして存在しているのではなく、
TIFFタグ 0x8769 <Exif IFD> の子要素として存在しています。
GDI+ではExif IFDは無視されるみたいですね。
また、XMPパケットとしても撮影日時が格納されていました。
これはタグID 0x02BC <XMP> の内部に、XMLの形式で入っていますが、
これもGDI+では無視されるタグのようです。
System.Drawing/GDI+を使って解析する限りはどうにもならないんじゃないかなぁ、
という印象ですね。
主にWPFにて使用される画像コンポーネントであるSystem.Windows.Media.Imaging/WICを
使用すれば、これらのタグも取得できるのを確認しました。
var dec = BitmapDecoder.Create(...);
var frame = dec.Frames[0];
var meta = (BitmapMetadata)frame.Metadata;
var date1 = meta.GetQuery("/ifd/{ushort=34665}/{ushort=36867}");
var date2 = meta.GetQuery("/ifd/{ushort=700}/xmp:CreateDate");
// BitmapMetadataでのタグのたどり方
static void ShowMeta(BitmapMetadata meta, int depth) {
foreach (var id in meta) {
var value = meta.GetQuery(id);
var child = value as BitmapMetadata;
var indent = new String(' ', depth * 2);
if (child == null) {
Debug.Print("{0}{1}={2}", indent, id, value);
}
else {
Debug.Print("{0}{1}:", indent, id);
ShowMeta(child, depth + 1);
}
}
}
|