我实际上使用自己的代码在金字塔的不同层生成图像(图块)(由 deepzoom 作曲家生成的图像)。我想知道是否可以在 Silverlight 中加载它们?通常在网上我已经看到了从深度缩放作曲家中导出的图像,因此是这个问题。
1 回答
对于单个大图像,如果您已经拥有图像的平铺图像金字塔集,则相当容易。
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”的所有文件夹都将包含单个 0_0.jpg 文件,因为只有在级别 8 以上,我们才能找到大于 Xml 中指定的单个图块的 256 个限制的图像。当然,如果您使用了不同的瓷砖尺寸,那么这对您来说会有所不同。
到“16”级,您希望拥有从 0_0.jpg 到 156_117.jpg 的所有文件(18526 个文件是单个文件夹的很多文件)。
Xaml
最后,要实际显示您使用MultiScaleImage
控件的图像并将其源属性指向 xml 文件:-
<MultiScaleImage Source="/Content/MyLargeImage1.xml" />