2013-04-02 8 views
4

Вот быстрый вопрос: как правильно добавить собственное пространство имен в XMP с помощью BitmapMetadata?Добавление пользовательского пространства имен в метаданные (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 схемы.

Так что, если вы не удовлетворены результатом вы можете:

  • Откройте файл изображения и заменить все prefix0 с MyNamespace
  • использовать библиотеку третьей стороной изменения метаданных
+0

спасибо за решение, это сработало для меня, но я не могу установить что-то вроде \t \t \t \t \t \t \t \t \t \t \t \t <РДФ: литий XML: LANG = "х-умолчанию"> Очищенный для связанных телевизионной программы рекламы, включая печатные и онлайн для: - Телевидение - Запланированные линейные услуги \t \t \t \t \t \t \t