Как связать метаданные с SubImage DeepZoom? - PullRequest
0 голосов
/ 06 января 2009

Я пытаюсь отсортировать коллекцию подизображений DeepZoom на основе произвольных данных, связанных с каждым изображением. Подизображения загружаются автоматически через XML-файл, созданный DeepZoom Composer. Я не вижу четкого способа связать произвольные данные с подизображением DeepZoom.

Решения, которые кажутся мне наиболее очевидными, хрупкие и плохо масштабируются. В идеале я хотел бы поместить соответствующие данные в сгенерированный файл XML, но я бы потерял эту информацию в следующем наборе сгенерированных изображений.

Есть ли устоявшийся способ достижения этой цели?

Ответы [ 2 ]

2 голосов
/ 20 марта 2009

Как вы заметили, DeepZoomComposer поддерживает элемент <Tag></Tag>, который можно использовать в элементе управления Silverlight MultiScaleImage ( фильтрация по примеру тега ).

Вы также правы в том, что «потеряете» любую информацию, добавляемую в файл XML, при редактировании в DeepZoomComposer и повторной генерации (однако вы не потеряете ее, если введете в DeepZoomComposer).

Чтобы обойти эту проблему, я написал небольшое консольное приложение под названием TagUpdater - в основном оно работает так :

  1. Вы помещаете свои метаданные в ИЗОБРАЖЕНИЯ: формат файла JPG поддерживает множество различных полей, но сейчас давайте используем заголовок, ключевые слова (теги), описание и рейтинг

  2. Вы добавляете свои изображения в DeepZoomComposer от Microsoft (не обязательно их выкладывать, так как вы, вероятно, захотите сортировать их динамически, и не надо вводить какие-либо метаданные) и Экспорт как обычно

  3. Вызовите TagUpdater.exe Metadata.xml через консоль (DeepZoomComposer сгенерирует файл Metadata.xml).

TagUpdater извлекает метаданные непосредственно из ваших изображений и обновляет Metadata.xml (см. Ниже). Это разрушительно для существующих данных <Tag>, но в противном случае файл можно использовать, как прежде, для предоставления информации метаданных для коллекции DeepZoom в элементе управления MultiScaleImage.

<Image>
<FileName>C:\Documents and Settings\xxxxxx\My Documents\Expression\Deep Zoom Composer Projects\Bhutan\source images\page01.jpg</FileName> 
<x>0</x> 
<y>0</y> 
<Width>0.241254523522316</Width> 
<Height>0.27256162721473</Height> 
<ZOrder>1</ZOrder> 
<Tag>Bhutan,Mask</Tag> 
<Description>Land of the Thunder Dragon</Description> 
<Title>Bhutan 2008</Title> 
<Rating>3</Rating> 
</Image>

Вы можете продолжать добавлять изображения / регенерировать, потому что метаданные поступают из изображений (не в поле тега DeepZoomComposer).

Вот пример - обратите внимание, как теги и описание справа обновляются при наведении курсора на каждое изображение, а также на видимые изображения, которые фильтруются по нажатию на тег.

Источник Кирупы можно изменить, чтобы использовать эти дополнительные данные ...

string tagString = g.Element("Tag").Value;
// get new elements as well
string descriptionString = g.Element("Description").Value;
string titleString = g.Element("Title").Value; 
string ratingString = g.Element("Rating").Value; 

Надеюсь, это будет интересно - сам TagUpdater не единственный способ сделать это. Это довольно просто: он просто открывает файл Metadata.XML, просматривает элементы <Image>, чтобы открыть <FileName>, извлекает метаданные, добавляет дополнительные элементы XML и сохраняет XML. Используя имя файла в качестве «ключа», вы можете получить дополнительную информацию из базы данных (например, цену или более описание данных) и расширить XML-файл столько, сколько хотите.

1 голос
/ 25 января 2009

Metadata.xml имеет свойство Tag, которое можно связать с каждым изображением. Ура!

...