使用silverlight在DeepZoom中显示自己的千兆像素图像

时间:2011-03-02 22:12:18

标签: silverlight image-processing imaging deepzoom

我实际上使用自己的代码来生成金字塔不同层的图像(图块)(由deepzoom编辑器生成的图像)​​。我想知道是否可以在silverlight中加载它们?通常在网上我看到从深度缩放编辑器导出的图像,因此问题。

1 个答案:

答案 0 :(得分: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”的文件夹。它在这个文件夹中我们有一系列代表金字塔图层的子文件夹。

对于Gigapixel图像(例如我上面使用过的尺寸),您将拥有17个文件夹,从“0”到“16”。因为您需要降低到16级才能以原始分辨率查看这样的图像。

这些文件夹中的每一个都包含构成金字塔中此图层的图块集。这些是.jpg文件,文件标题为“x_y”,其中x和y是x和y轴上的tile序号位置,其中0_0是左上角的tile。

在此示例中,所有直到并包含“8”的文件夹都将包含单个0_0.jpg文件,因为只有在8级以上才能找到大于Xml中指定的单个图块的256个限制的图像。当然,如果你使用了不同的瓷砖尺寸,那么这对你来说会有所不同。

按级别“16”,您可能希望拥有从0_0.jpg到156_117.jpg的所有文件(18526个文件是单个文件夹的很多文件)。

Xaml

最后要实际显示图像,请使用MultiScaleImage控件并将其source属性指向xml文件: -

<MultiScaleImage Source="/Content/MyLargeImage1.xml" />