zoukankan      html  css  js  c++  java
  • 使用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>
  • 相关阅读:
    Python解释器安装
    有钱就放余额宝的人,这个习惯恐怕要改一改!
    这么详细的存储基础知识,你不看看? 会后悔的!
    超全!华为交换机端口vlan详解~
    华为:鸿蒙绝不是安卓换皮!!!
    VS Code 真的会一统江湖吗?
    用户与安全 -(1)Linux用户及组管理
    运维必看!这个技能薪水28.8万,工资竟然还只是零花钱....
    原来 Linux 日志文件系统是这样工作的~
    干货长文:Linux 文件系统与持久性内存介绍
  • 原文地址:https://www.cnblogs.com/aoldman/p/3069056.html
Copyright © 2011-2022 走看看