在WPF中快速渲染drawingvisuals

Lor*_*mez 6 c# wpf drawing drawingcontext

目前我在画布上有一个图像,我可以在我的应用程序中自由移动,我有6层DrawingVisuals渲染,但它似乎很慢.我正在使用RenderTargetBitmap来渲染视觉效果.是否有更快的方式在图像或任何其他框架元素上显示视觉效果,我可以在画布上自由移动?

XAML:

<Canvas>
    <Image Height="505" HorizontalAlignment="Left" Margin="0,0,0,0" Name="_MapImage" Stretch="Fill" VerticalAlignment="Top" Width="700" MouseLeftButtonDown="_MapImage_MouseDown" MouseWheel="_MapImage_MouseWheel" MouseLeftButtonUp="_MapImage_MouseUp" MouseMove="_MapImage_MouseMove" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)

码:

_renderRoutesBitmap = new RenderTargetBitmap((int)(_MapImage.Width), (int)(_MapImage.Height), 96, 96, PixelFormats.Default);

for (int i = 6; i < 8; ++i)
{
     if((layerCode / (int)Math.Pow(10,i) % 2) == 1)
     _renderRoutesBitmap.Render(_layers[i]); //takes too much time
}
_RouteImage.Source = _renderRoutesBitmap;
Run Code Online (Sandbox Code Playgroud)

GET*_*Tah 2

前段时间我不得不做类似的事情,我必须编写自己的 GIS 应用程序。我必须绘制成千上万的绘图视觉效果,我的发现RenderTargetBitmap对于位图操作来说这不是一个好的选择,因为它由于不使用图形硬件加速而受到影响。Silverlight有一个更合适的类;WriteableBitmap它允许您的应用程序直接写入 GPU 缓冲区。唯一的问题是它仅适用于 Silverlight。如果您想坚持使用位图进行操作,那么您可以使用此处提供的WriteableBitmapWPF 的等效项。WriteableBitmapEx

由于您总共只有 6 个绘图视觉效果,我建议您转而使用更高级别的 UI 元素,例如形状等。