BitmapMetadata.GetQuery()抛出“;元数据查询请求无效”;
本文关键字:数据查询 无效 请求 GetQuery 抛出 BitmapMetadata | 更新日期: 2023-09-27 17:59:43
我正在尝试使用元数据类从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)
;抛出异常CCD_ 2;我不知道如何更改它以使其获得0.2345的值。有人知道吗?非常感谢。
以下是tiff文件,以便您查看:http://dl.dropbox.com/u/105139407/ChanA_0001_0001_0001_0003.tif
显然,您要查找的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.请随意使用或根据您的需要进行调整;)