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

时间:2013-02-17 22:09:55

标签: c# metadata tiff decoder

我正在尝试使用元数据类从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

1 个答案:

答案 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。随意使用它或根据您的需要进行调整;)