1

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

4

1 回答 1

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

于 2013-02-17T22:46:31.843 回答