【发布时间】:2011-12-15 14:39:29
【问题描述】:
我正在编写一个可以显示几何图形的地图控件。为了获得更好的性能,我使用DrawingVisuals 绘制所有几何图形,然后将其写入RenderTargetBitmap,如下面的代码所示:
public class Map{
public ImageSource MapDrawingImage{get;set;}
private void RenderMap(){
MapDrawingImage= new RenderTargetBitmap(w, h, 96, 96, PixelFormats.Pbgra32);
foreach (Layer layer in map.Layers) {
System.Windows.Media.DrawingVisual layerDrawing = Render(layer, map);
MapDrawingImage.Render(layerDrawing);
}
}
}
为了显示地图,主窗口有一个Image 控件,其中Source 设置为Map.MapDrawingImage 图像源。为了自动更新图像,我使用了以下数据绑定:
RenderOptions.SetBitmapScalingMode(mapImage, BitmapScalingMode.LowQuality);
// Map image binding
Binding mapBinding = new Binding();
mapBinding.Source = map;
mapBinding.Path = new PropertyPath("MapDrawingImage");
mapImage.SetBinding(System.Windows.Controls.Image.SourceProperty, mapBinding);
当地图是静态的时,这非常有效。但是,在地图以每秒 5 到 10 次的速度更新的动态模式下,数据绑定似乎有点落后,应用程序变慢了。我已经搜索了很长时间,我发现:
-
RenderTargetBitmap不使用硬件加速,因此在渲染地图时会导致一些延迟。 - 数据绑定也可能会导致刷新地图图像时出现一些延迟
有没有更好的方法来提高地图性能(RenderTargetBitmap 替换、数据绑定改进)?
提前致谢,
【问题讨论】:
标签: wpf data-binding graphics gis