【发布时间】:2011-03-02 22:12:18
【问题描述】:
我实际上使用自己的代码在金字塔的不同层生成图像(图块)(由 deepzoom 作曲家生成的图像)。我想知道是否可以在 Silverlight 中加载它们?通常在网上我已经看到了从深度缩放作曲家导出的图像,因此是这个问题。
【问题讨论】:
标签: silverlight image-processing imaging deepzoom
我实际上使用自己的代码在金字塔的不同层生成图像(图块)(由 deepzoom 作曲家生成的图像)。我想知道是否可以在 Silverlight 中加载它们?通常在网上我已经看到了从深度缩放作曲家导出的图像,因此是这个问题。
【问题讨论】:
标签: silverlight image-processing imaging deepzoom
对于单个大图像,如果您已经拥有该图像的平铺图像金字塔集,则相当容易。
Xml
为您自己创建一个子文件夹(通常在 ClientBin 下)以包含您的一组大图像(在本示例中我们将其称为“内容”)。在此文件夹中创建一个 Xml 文件来描述您的 deepzoom 图像,例如“MyLargeImage1.xml”。使用以下 XML:-
<?xml version="1.0" encoding="utf-8"?>
<Image TileSize="256" Overlap="1" Format="jpg" xmlns="http://schemas.microsoft.com/deepzoom/2008">
<Size Width="40000" Height="30000" />
</Image>
注意TileSize 属性表示您使用的瓷砖的边长。因此,如果您在创建金字塔时使用了不同的图块大小,那么您应该调整此值。另请注意Overlap,这表示每个图块可以重叠多少像素,如果您在平铺中没有使用任何重叠,则将此值设置为 0。
在Size 元素中指定图像的实际像素尺寸。
图像文件
现在在与此 Xml 文件相同的文件夹中创建一个具有相同标题但后缀为“_files”的文件夹。在这种情况下,一个名为“MyLargeImage1_files”的文件夹。在这个文件夹中,我们有一系列代表金字塔层的子文件夹。
如果是千兆像素图像(例如我上面使用的尺寸),您将有 17 个文件夹,名称从“0”到“16”。因为您需要降到 16 级才能以原始分辨率查看此类图像。
这些文件夹中的每一个都将包含构成金字塔中这一层的一组图块。这些是 .jpg 文件,文件标题格式为“x_y”,其中 x 和 y 是图块在 x 和 y 轴上的序号位置,其中 0_0 是左上角图块。
在此示例中,直到“8”(包括“8”)在内的所有文件夹都将包含一个 0_0.jpg 文件,因为只有在 8 级以上,我们才能找到大于 Xml 中指定的单个图块的 256 个限制的图像。当然,如果您使用了不同的图块大小,那么这对您来说会有所不同。
到“16”级时,您会期望拥有从 0_0.jpg 到 156_117.jpg 的所有文件(18526 个文件是单个文件夹的很多文件)。
Xaml
最后要实际显示您使用MultiScaleImage控件的图像并将其源属性指向xml文件:-
<MultiScaleImage Source="/Content/MyLargeImage1.xml" />
【讨论】: