注意说明:
您可以使用工具来创建 Deep Zoom 源文件(例如,Deep Zoom Composer 或 Photosynth)。这可以提供一种方法来查看 Deep Zoom 文件格式的工作原理,包括拼块和拼块信息是如何存储到磁盘的。
注意说明:
Deep Zoom 图像棱锥图仅支持 BitmapImage 类所支持的图像文件。
单个图像
Deep Zoom 中的单个大图像是由平铺图像棱锥图表示的。这允许 Deep Zoom 呈现引擎仅抓取图像的特定视图所必需的那些数据。如果查看图像时图像的缩小幅度非常大,则在屏幕上显示该图像只需一个小缩略图。
但是,如果用户将图像放大到大图像的特定区域,则将仅下载显示该特定区域所需的那些拼块。这可以节省非常大的带宽,因为通常用户仅对大图像的某些方面感兴趣。下图从概念上演示了图像棱锥图的外观。图像存储为平铺图像棱锥图。在棱锥图的每一个级别,图像缩小比例为 4(每个维度上的因子为 2)。此外,图像还平铺为 256x256 个拼块。
例如,如果您放大了图像以仅查看图像的突出显示的中间部分,Deep Zoom 将仅加载突出显示的拼块,而不是加载整个 1024x1024 图像。
棱锥图的每一个分辨率称为一个级别。级别从 0 开始算起,1x1 像素为 0 级别。每一个级别的大小为 2(level)x2(level)。每一个级别都存储在单独的文件夹中。所有级别存储到的文件夹的名称都必须与 DZI 文件名相同,且移除扩展名并在其后追加"_files"。例如,test.dzi 的棱锥图存储在 test_files 中。每一个级别都可以划分为多个拼块。拼块命名为 column_row.format,其中 row 是拼块的行号(在顶部从 0 开始),column 是拼块的列号(在左边从 0 开始),format 是所用图像格式的相应扩展名(JPEG 或 PNG)。
稀疏图像
Deep Zoom 还支持稀疏图像的概念。稀疏图像允许用户创建某些部分比其他部分具有更大分辨率的图像。
如果用户要创建具有分形布局的图像,则稀疏图像很有用。例如,右下角具有更多细节的汽车广告,用户可以放大该广告来获取更多信息。
下图从概念上演示了位于另一个图像棱锥图中的图像棱锥图(称为稀疏图像):
集合
一个集合由多个图像组成。Deep Zoom 优化了对图像集合的处理,它使多个较低级别的图像能够共享拼块以降低网络流量,并同时呈现数百个高分辨率图像。Deep Zoom 中的集合优化充分利用了下面这一事实:很多次,用户都将希望显示相关内容,然后放大一个特定细节。对于集合,图像缩略图存储在一个共享拼块(256x256 像素)中。
例如,Deep Zoom 可以仅加载和解码一个拼块,并在一个操作中检索数百个图像的缩略图。
下图演示了如何以不同详细信息级别存储缩略图。
朝着棱锥图的顶部,所有图像均放置到一个拼块中。在棱锥图的中部,图像共享拼块,但可能需要多个拼块来包含所有图像。在棱锥图的底部,通常一个图像对应一个拼块。
Deep Zoom 集合就像单个图像那样存储在图像棱锥图中,拼块的命名和编号方式均与单个图像相同。集合的级别号表示了拼块中每个图像的大小,而不是所有图像的总大小。例如,在级别 2,存在每个图像的 4x4 像素版本。
图像以共享级别存储,从而可以更快地访问相关图像(频繁共享拼块),减少所需的服务器往返次数和图像解码次数。假设屏幕上的所有图像都非常小,则只需下载很少数量的拼块就可以获取显示所需的图像。
请注意,集合中的项是以精细地从一个级别缩小到下一个级别的方式在空间上存储和放置的。Deep Zoom 集合在一个集合中存储各个项的布局信息,并且每个项仅存储一次。所使用的布局称为"Morton 布局"。第 n 项存储在区分偶数位和奇数位 n 时发现的位置中,然后使用它们查找行和列。例如,第 5 个图像为 510=1012,它被拆分为 112=310 和 02=010。因此,它存储在集合的第 0 行第 3 列。
例如,当生成集合时,各个项按照如下方式放置(按时间顺序排列):
0 1 4 5 16 17
2 3 6 7 18 19
8 9 12 13 ...
10 11 14 15
您可以看到这是一个真正的分形布局,并且可以无限增大它。
请注意,上图仅显示了三个级别的拼块。但是,一个集合可以包含级别 0 到为该集合所选的最大级别。拼块大小必须大于或等于 2最大级别。