2013-04-02 65 views
4

下面是一個簡單問題:如何使用BitmapMetadata正確地向XMP添加自定義名稱空間?向元數據添加自定義名稱空間(BitmapMetadata)

比方說,我想要的命名空間看起來像這樣: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觀點:

<rdf:Description rdf:about="" xmlns:prefix0="MyNamespace"> ... </rdf:Description> 

因此,所有的標籤都帶有前綴prefix0,我想它是

<rdf:Description rdf:about="" xmlns:MyNamespace="http://test"> ... </rdf:Description> 

任何想法怎麼辦或者如果它甚至可以用BitmapMetadata

回答

2

最好的,你可以用BitmapMetadata實現:

<rdf:Description xmlns:prefix0="http://test">...</rdf:Description> 

這裏是元數據查詢:

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

根據文檔:

如果沒有了友好的模式前綴 示例如果圖像包含使用XMP元數據一個自定義的第三方模式,元數據查詢應該使用完整的模式URL。

所以,如果你是不是滿意的結果,您可以:

  • 打開圖像文件,並與MyNamespace
  • 使用第三方庫更換所有prefix0修改元數據
+0

感謝解決方案,它爲我工作,但我不能設置像\t \t \t \t \t \t \t \t \t \t \t \t 清除了相關的電視節目的宣傳包括印刷和在線: - 電視 - 預定線性服務 \t \t \t \t \t \t \t

相關問題