使用ImageBrush替換PictureMarkerSymbol以加強graphic顯示性能


ArcGIS API for Microsoft Silverlight/WPF 包含一個PictureMarkerSymbol 類,使用一個圖片圖標來渲染graphic點. 象API中的其它符號一樣,它的內容通過一個控件模板定義。
PictureMarkerSymbol 控件模板定義如下:


<ControlTemplate xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Image Source="{Binding Symbol.Source}"
Opacity="{Binding Symbol.Opacity}"
Stretch="Fill"
Width="{Binding Symbol.Width}"
Height="{Binding Symbol.Height}" />
</ControlTemplate>

        當分配給一個graphic時(例如,Graphic.Symbol),一個Image控件實例被創建。如果同一個picture marker symbol被分配給500個graphic點,圖片就被解碼500次。導致的結果,初始graphic渲染將變得相對緩慢。盡管符號被綁定到一個圖片資源,並且因此在500個graphics中共享(僅下載一次),但是圖片解碼不會共享。
為了減少與PictureMarkerSymbol使用的Image控件相關的經常開銷,使用ImageBrush為符號創建一個客戶化控件模板。
        說明描述了如何使用ImageBrush替代PictureMarkerSymol以加強graphic的顯示性能。

內容:

         從一個擁有Fill屬性,可以被設置為任何類型brush的容器(例如,Rectangle)入手。使用ImageBrush來引用目標圖片(image),以便用來符號化graphics。ImageBrush負責解碼圖片,因此它可以在所有將使用它的graphic要素中共享。那么,當客戶化符號被分配給500個graphic點時,500個矩形實例將被創建(正如模板中定義的),但是只有一個Image Brush被生成。下面是用於符號的基礎控件模板:


<ControlTemplate
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Rectangle Fill="{Binding Symbol.Fill}"
Opacity="{Binding Symbol.Opacity}"
Width="{Binding Symbol.Width}"
Height="{Binding Symbol.Height}" />
</ControlTemplate>

        從使用包含在ArcGIS API for Microsoft Silverlight/WPF 中的MarkerSymbol類,或者從scratch創建一個新的客戶化符號入手。無論是哪種情況,客戶化marker 符號類都應該有一個公共的Fill屬性,它可以被用於綁定到刷子。這里僅是一個示例,顯示如何為MarkerSymbol類定義一個客戶化控件模板:


<Grid.Resources>
<ImageBrush ImageSource="/images/i_pushpin.png" x:Name="MyImageBrush" />
<esriSymbols:MarkerSymbol x:Name="MyPictureMarker" OffsetX="10" OffsetY="10">
<esriSymbols:MarkerSymbol.ControlTemplate>
<ControlTemplate>
<Rectangle Fill="{StaticResource MyImageBrush}"
Opacity="0.75" Width="20" Height="20" />
</ControlTemplate>
</esriSymbols:MarkerSymbol.ControlTemplate>
</esriSymbols:MarkerSymbol>
</Grid.Resources>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM