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

本文关键字:缩放 复杂 图像 绘制 WPF | 更新日期: 2023-09-27 17:54:17

我正在绘制一个由数百个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转换为位图?

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

如果你正在使用RenderTargetBitmap与新创建的元素,你需要确保你调用测量和排列。

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而不是一个图像元素,这样你可以在多个地方使用它。

WPF有一些你可能想要研究的特性,比如Freezables, BitmapCache和CachingHint,但是RenderTargetBitmap仍然是一个很好的选择,因为它是可预测的。