2011-03-02 76 views
2

我實際上使用我自己的代碼在金字塔的不同層上生成圖像(圖塊)(由deepzoom composer生成的圖層)。我想知道是否有可能在Silverlight中加載它們?通常在網絡上,我看到圖像從深度縮放製作器中導出,因此也是一個問題。在DeepZoom中使用silverlight顯示自己的千兆像素圖像

回答

1

對於單張大圖像,如果您已經擁有圖像的金字塔圖像集合,則相當容易。

在XML

創建自己的子文件夾(在的ClientBin通常)來包含大量圖片的集合(讓剛剛把它稱爲「內容」這個例子)。在此文件夾中創建一個Xml文件來描述您的深度縮放圖像,例如「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級才能以其原始分辨率查看此類圖像。

這些文件夾中的每一個都會包含金字塔中構成此圖層的一組圖塊。這些是具有格式爲「x_y」的文件標題的.jpg文件,其中x和y是x和y軸中的區塊序號位置,其中0_0是左上方的區塊。

在此示例中,所有包含「8」的文件夾都將包含一個0_0.jpg文件,因爲它僅在8級以上,我們會發現映像的大小超過了在Xml中指定的單個磁貼的256個限制。當然,如果你使用了不同的瓷磚尺寸,那麼這對你來說會有所不同。

按照級別「16」,你會期望所有文件從0_0.jpg到156_117.jpg(18526文件是單個文件夾的很多文件)。

XAML中

最後實際顯示圖像使用MultiScaleImage控制,並在xml文件指向其source屬性: -

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

我試過的東西非常相似,你說的話。但是,如果我創建自己的XML,它似乎沒有任何東西。但是,如果我從以前的版本中複製XML,它似乎工作(它實際上將這個新的圖像疊加在較舊的版本上)。我的觀點是,源文件夾中沒有任何文件夾包含此舊圖像,它在瀏覽器中如何顯示。我的第二種方法主要來自於我無法從頭開始寫入xml的工作。 – Manish 2011-03-03 19:27:42

+0

@Manish:獲取http://www.fiddler2.com/的副本,並在使用自己的XML時監視來自Silverlight的請求。請記住,這些網址與ClientBin文件夾相關,例如/ = ClientBin文件夾本身。 – AnthonyWJones 2011-03-03 22:01:01