標準のカメラ タグ (FNumber、ExposureTime など) の EXIF 値を取得するために、MSDN - Native Image Format Metadata Queries ( http://msdn.microsoft.com/en-us/library/ee719904%28VS ) で定義されているリストを使用しました。 .85%29.aspx ) - 下にスクロールし、EXIF メタデータの下でタグの名前を取得できます。
タグの値を取得するには、「System.Photo」を追加する必要があります。タグ名の前。たとえば、FNumber を取得するには、完全なタグ名は "System.Photo.FNumber" です。
EXIF データを読み取るために、次のヘルパー メソッドを作成しました。
public object GetMetadataValue(BitmapMetadata bitmapMetadata, string metadataQuery)
{
object metadataValue;
metadataQuery = "System.Photo." + metadataQuery;
if (bitmapMetadata.ContainsQuery(metadataQuery))
metadataValue = bitmapMetadata.GetQuery(metadataQuery);
else
metadataValue = null;
return metadataValue;
}
public T GetMetadataValue<T>(BitmapMetadata bitmapMetadata, string metadataQuery)
{
object metadataValue = GetMetadataValue(bitmapMetadata, metadataQuery);
if (metadataValue != null && metadataValue.GetType() == typeof(T))
return (T)metadataValue;
return default(T);
}
public string GetMetadataText(BitmapMetadata bitmapMetadata, string metadataQuery)
{
object metadataValue = GetMetadataValue(bitmapMetadata, metadataQuery);
return metadataValue == null ? "" : metadataValue.ToString();
}
FNumberよりも簡単に取得できます:
GetMetadataText(bitmapMetadate, "FNumber")
露出時間を取得するのはもう少しトリッキーです。
string exposureTimeText;
double exposureTime = GetMetadataValue<double>(bitmapMetadate, "ExposureTime");
if (exposureTime == 0.0)
exposureTimeText = "";
else if (exposureTime < 1.0)
exposureTimeText = string.Format("1/{0}s", 1 / exposureTime);
else
exposureTimeText = string.Format("{0:0.0}s", exposureTime);