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

BitmapMetadata.GetQuery()抛出“;元数据查询请求无效”;

显然,您要查找的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.请随意使用或根据您的需要进行调整;)