我正在编写一个可以显示几何图形的地图控件。为了获得更好的性能,我使用DrawingVisual
绘制了所有几何图形,然后将其写入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
替换,数据绑定改进)?
提前致谢,
答案 0 :(得分:1)
数据绑定在单独的线程中更新。所以这将永远是一个延迟。它也适用于队列,所以当数据绑定无法跟上时,队列会越来越大。解决方案是使用静态图像并更改图像本身而不是用其他图像替换它。