ちょっと驚きと戸惑いです。画像からプロパティ項目を読み込もうとしています。特に「Date Taken」に興味があります。私はまさにそれを行う手順を書きました。多かれ少なかれ。一部のファイルでは完全に機能しますが...
プロパティに「撮影日」が含まれるファイルがいくつかあります (Windows エクスプローラー、Windows 7 x64 で表示した場合)。それらは、作成、変更、およびアクセスされた日付とは異なります。だから私は4回目のデートをしています。ただし、プロパティ項目をループすると、(どの ID でも) 表示されません。PropertyItem.Id (0x9003 または 36867) で検索すると、プロパティ項目が存在しないことがわかります。
プロパティ項目をループするマイ コード:
for (int i = 0; i < fileNames.Length; i++)
{
FileStream fs = new FileStream(fileNames[i], FileMode.Open, FileAccess.Read);
Image pic = Image.FromStream(fs, false, false);
int t = 0;
foreach (PropertyItem pii in pic.PropertyItems)
{
MessageBox.Show(encoding.GetString(pii.Value, 0, pii.Len - 1) + " - ID: " + t.ToString());
t++;
}
}
「Date Taken」プロパティのみを読み取るコード (ここから盗みました: http://snipplr.com/view/25074/ )
public static DateTime DateTaken(Image getImage)
{
int DateTakenValue = 0x9003; //36867;
if (!getImage.PropertyIdList.Contains(DateTakenValue))
return DateTime.Parse("01-01-2000");
string dateTakenTag = System.Text.Encoding.ASCII.GetString(getImage.GetPropertyItem(DateTakenValue).Value);
string[] parts = dateTakenTag.Split(':', ' ');
int year = int.Parse(parts[0]);
int month = int.Parse(parts[1]);
int day = int.Parse(parts[2]);
int hour = int.Parse(parts[3]);
int minute = int.Parse(parts[4]);
int second = int.Parse(parts[5]);
return new DateTime(year, month, day, hour, minute, second);
}
しかし、Windows エクスプローラーの「ファイル プロパティ ウィンドウ」で取得した日付を変更すると、プログラムに表示され始めます。
だから私の質問は:この「撮影日」はどこから来たのですか?どうすればアクセスできますか? EFIX データ以外に別の情報源があるのではないでしょうか?
ありがとう!