如何使用元数据查询语言从图像中检索制造商注释?我正在尝试的图像是用尼康D300s拍摄的jpeg。
我已经能够获得EXIF和GPS数据了,但我不确定使用哪个IFD和查询字符串来查找制造商说明。
我尝试了各种不同的IFD(尼康,尼康3,尼康-3等)和查询,但无法检索到任何结果:
tagValueQuery = string.Format("/app1/ifd/Nikon3/subifd:{{ushort={0}}}", tag);
if (metadata.ContainsQuery(tagValueQuery))
return metadata.GetQuery(tagValueQuery);
我一直在使用本网站作为尼康标签编号的参考:http://gvsoft.homedns.org/exif/makernote-nikon-type3.html。
感谢您的帮助!
答案 0 :(得分:1)
要获取标准相机标签(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);