【问题标题】:Displaying own gigapixel images in DeepZoom using silverlight使用 silverlight 在 DeepZoom 中显示自己的千兆像素图像
【发布时间】:2011-03-02 22:12:18
【问题描述】:

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

【问题讨论】:

    标签: silverlight image-processing imaging deepzoom


    【解决方案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”(包括“8”)在内的所有文件夹都将包含一个 0_0.jpg 文件,因为只有在 8 级以上,我们才能找到大于 Xml 中指定的单个图块的 256 个限制的图像。当然,如果您使用了不同的图块大小,那么这对您来说会有所不同。

    到“16”级时,您会期望拥有从 0_0.jpg 到 156_117.jpg 的所有文件(18526 个文件是单个文件夹的很多文件)。

    Xaml

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

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

    【讨论】:

    • 我尝试了与您所说的非常相似的东西。但是,如果我创建自己的 XML,它似乎没有任何内容。但是,如果我从以前的版本之一复制 XML,它似乎可以工作(它实际上将这个新图像叠加在旧图像上)。我的观点是,当我的源文件夹中没有一个包含这个旧图像时,它如何在浏览器中显示。我的第二种方法主要来自这样一个事实,即我无法从头开始编写 xml工作。
    • @Manish:获取fiddler2.com 的副本,并在您使用自己的 XML 时监控来自 Silverlight 的请求。请记住,url 是相对于 ClientBin 文件夹的,例如/ = ClientBin 文件夹本身。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多