我正在尝试使用元数据类从tiff文件中提取时间信息;以下是时间信息在tiff文件中的部分:
<Plane TheZ="0" TheT="0" TheC="0" DeltaT="0.2345"/>
其中0.2345是我试图提取的信息。 这是我的代码试图解决它:
string searchtext = "DeltaT=";
FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
TiffBitmapDecoder tbd = new TiffBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
if (tbd.Frames[0] != null && tbd.Frames[0].Metadata != null)
{
//BitmapMetadata bmd = new BitmapMetadata("tiff");
BitmapMetadata bmd = tbd.Frames[0].Metadata as BitmapMetadata;
bmd.GetQuery(@searchText);
}
然而,行bmd.GetQuery(@searchText)
;抛出异常"Metadata query request is not valid"
;我不知道如何更改它以使其获得0.2345值。任何人有任何想法?非常感谢。
以下是tiff文件,您可以查看:http://dl.dropbox.com/u/105139407/ChanA_0001_0001_0001_0003.tif
答案 0 :(得分:2)
显然你正在寻找的XML是“/ ifd / {ushort = 270}”(不要问我为什么 - 我对TIFF元数据应该是什么样子一无所知......) 。请注意,它返回整个XML文档,因此您仍然需要解析它。此代码检索DeltaT
:
var decoder = new TiffBitmapDecoder(new Uri(fileName), BitmapCreateOptions.None, BitmapCacheOption.Default);
var metadata = (BitmapMetadata)decoder.Frames[0].Metadata;
string xml = (string)metadata.GetQuery("/ifd/{ushort=270}");
var doc = XDocument.Parse(xml);
var ns = doc.Root.GetDefaultNamespace();
var plane = doc.Root.Element(ns + "Image")
.Element(ns + "Pixels")
.Element(ns + "Plane");
double deltaT = (double)plane.Attribute("DeltaT");
编辑:这是一个LINQPad脚本,用于快速查看图像的元数据:http://pastebin.com/daBTdW33。随意使用它或根据您的需要进行调整;)