要获取标准相机标签(FNumber、ExposureTime 等)的 EXIF 值,我使用了 MSDN 上定义的列表 - 本机图像格式元数据查询(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);