WPF:快速绘制/缩放复杂图像

时间:2011-05-03 12:04:32

标签: c# .net wpf xaml

我正在绘制一个由数​​百个GeometryDrawing对象组成的复杂图像。绘图非常快,但重新缩放很慢。我可以想象重绘数百个对象需要一些时间。作为解决方案,我想将绘图转换为位图。

我尝试了以下内容,但这不起作用。结果图片为空白。

private Image CreateBitmapImage(DrawingImage drawingImage)
{
    var image = new Image()
    image.Source = drawingImage;
    var bitmap = new RenderTargetBitmap(300, 300, 96, 96, PixelFormats.Pbgra32);
    bitmap.Render(image);
    image.Source = bitmap;
    return image;
}

如何将DrawingImage转换为位图?

1 个答案:

答案 0 :(得分:1)

如果您将RenderTargetBitmap与新创建的元素一起使用,则需要确保调用Measure and Arrange。

private Image CreateBitmapImage(DrawingImage drawingImage)
{
    var image = new Image();
    image.Source = drawingImage;
    var bitmap = new RenderTargetBitmap(300, 300, 96, 96, PixelFormats.Pbgra32);
    var size = new Size(bitmap.PixelWidth,bitmap.PixelHeight);
    image.Measure(size);
    image.Arrange(new Rect(size));
    bitmap.Render(image);
    image.Source = bitmap;
    return image;
}

您可能希望将大小作为参数传递,最好返回RenderTargetBitmap而不是Image元素,这样您就可以在多个位置使用它。

WPF有一些您可能想要查看的功能,例如TileBrushes的FreezablesBitmapCacheCachingHint,但RenderTargetBitmap仍然是一个不错的选择,因为它是可预测的。