gpt4 book ai didi

c# - WPF:复杂图像的快速绘制/缩放

转载 作者:太空宇宙 更新时间:2023-11-03 14:19:14 24 4
gpt4 key购买 nike

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

最佳答案

如果您将 RenderTargetBitmap 与新创建的元素一起使用,您需要确保调用 Measure 和 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 有一些您可能想要研究的功能,例如 Freezables , BitmapCacheCachingHint对于 TileBrushes,但是 RenderTargetBitmap 仍然是一个不错的选择,因为它是可预测的。

关于c# - WPF:复杂图像的快速绘制/缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5869164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com