我正在绘制一个由数百个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转换为位图?
答案 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的Freezables,BitmapCache和CachingHint,但RenderTargetBitmap仍然是一个不错的选择,因为它是可预测的。