你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
问题
话题
文章
下载
帮助
登录
注册
Howto: 使用ImageBrush替换PictureMarkerSymbol以加强graphic显示性能
文章编号 :
37033
软件:
ArcGIS API for Microsoft Silverlight/WPF 9.3.1
操作系统:
N/A
1 个回复
EsriSupport
赞同来自:
摘要:
ArcGIS API for Microsoft Silverlight/WPF 包含一个PictureMarkerSymbol 类,使用一个图片图标来渲染graphic点. 象API中的其它符号一样,它的内容通过一个控件模板定义。
PictureMarkerSymbol 控件模板定义如下:
<ControlTemplate xmlns="
http://schemas.microsoft.com/client/2007"
xmlns:x="
http://schemas.microsoft.com/w ... gt%3B
<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/w ... gt%3B
<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>
创建时间:2009-07-28
最近更新: 2010-06-22
【
原文链接
】
http://support.esrichina.com.c ... .html
要回复问题请先
登录
或
注册
发起人
EsriSupport
相关问题
如何优雅的使用ArcGIS知乎?
苹果系统下可以使用arcgis 吗?
在Visual studio 2015 中使用 Arcgis API for JavaScript v3.16 如何实现代码智能提示?
请问arcmap如何使用多线程?
arcgis10.4 离线部署js api 4.3 版本 无法显示
如何使用脚本或其他方法,将图层属性中属性域原值内容替换为属性域描述?
arcgis runtime for andriod 100.1 如何使用eclipse开发
字段计算器中替换中文问题
使用ArcGIS Desktop10.2版本,如何设置图例横着放且label在正下方?
ArcGis打开图层后显示unknown units,想要define一个投影坐标系,但数据大小似乎不一致
按照Engine+开发手册ArcEngine_10.0_C#二次开发编写的鹰眼的代码,运行时鹰眼不显示!
问题状态
最新活动:
2015-12-01 06:50
浏览:
2181
关注:
1
人
—— 扫技术支持中心微信服务号!
—— 让GIS知乎问答随时随地!
1 个回复
EsriSupport
赞同来自:
PictureMarkerSymbol 控件模板定义如下:
<ControlTemplate xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/w ... gt%3B
<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/w ... gt%3B
<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>
创建时间:2009-07-28
最近更新: 2010-06-22
【原文链接】
http://support.esrichina.com.c ... .html
要回复问题请先登录或注册