我正在尝试根据与每个图像相关联的任意数据对DeepZoom子图像集合进行排序。通过DeepZoom Composer生成的XML文件自动加载子图像。我看不到一种清晰的方法来将任意数据与DeepZoom子图像相关联。
在我看来最明显的解决方案是脆弱的,并且不能很好地扩展。理想情况下,我希望将相关数据放在生成的XML文件中,但我会在下一组生成的图像中丢失该信息。
有没有一种行之有效的方法来实现这个目标?
发布于 2009-03-20 07:29:02
正如你已经注意到的,DeepZoomComposer支持一个<Tag></Tag>元素,你可以在你的Silverlight MultiScaleImage控件(filtering by tag example)中使用它。
您也是对的,当您在DeepZoomComposer中编辑并重新生成时,您将“丢失”您添加到XML文件中的任何信息(但是,如果您键入DeepZoomComposer,则不会丢失这些信息)。
为了解决这个问题,我编写了一个名为TagUpdater的小型控制台应用程序--基本上就是works like this
TagUpdater.exe Metadata.xml (DeepZoomComposer将已经生成了Metadata.xml文件)。TagUpdater直接从您的图像中提取元数据并更新Metadata.xml (如下所示)。它会破坏现有的<Tag>数据,但除此之外,还可以像以前一样使用该文件为MultiScaleImage控件中的DeepZoom集合提供元数据信息。
<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标签框)。
这里是an example -注意当你将鼠标悬停在每个图像上时,右侧的标签和描述是如何更新的,以及基于单击标签而过滤的可见图像。
可以修改Kirupa's源以使用此额外数据...
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文件。
发布于 2009-01-24 21:56:20
Metadata.xml有一个可以与每个图像关联的Tag属性。万岁!
https://stackoverflow.com/questions/415036
复制相似问题