将自定义命名空间添加到元数据(BitmapMetadata)

这是一个简单的问题:如何使用BitmapMetadata正确地将自定义命名空间添加到XMP?

假设我希望命名空间看起来像这样: xmlns:MyNamespace="http://test"

如何在BitmapMetadata添加命名空间没有明确的方法,所以我尝试了这个:

 //I retrieve the image frame (Frame[0]), then: var metadata = (BitmapMetadata) frame.Metadata.Clone(); //Covering all bases metadata.SetQuery("/app1/ifd/PaddingSchema:Padding", 4096); metadata.SetQuery("/app1/ifd/exif/PaddingSchema:Padding", 4096); metadata.SetQuery("/xmp/PaddingSchema:Padding", 4096); 

现在主要的查询,我尝试了’显而易见的方式’:

 metadata.SetQuery("/xmp/MyNamespace:MyTag", "AwesomeTagValue"); 

果然,如果我保存图像,打开它然后运行

 var value = (string) metadata.GetQuery("/xmp/MyNamespace:MyTag"); 

它返回正确的值 – AwesomeTagValue。

但问题是,标签被写入具有格式错误的命名空间的文件。 我偷看了文件,这是剥离的XML / RDF视图:

  ...  

所以所有的标签都以prefix0为前缀,我希望它是

  ...  

任何想法如何做到这一点,或甚至可能使用BitmapMetadata

使用BitmapMetadata可以实现的最佳BitmapMetadata

 ... 

这是元数据查询:

 metadata.SetQuery("/xmp/{wstr=http://test}:MyTag", "AwesomeTagValue"); 

根据文件:

如果特定架构没有友好架构前缀,例如,如果图像包含使用自定义第三方架构的XMP元数据,则元数据查询应使用完整架构URL。

因此,如果您对结果不满意,您可以:

  • 打开图像文件并将所有prefix0替换为MyNamespace
  • 使用第三方库修改元数据