我正在绘制一个由数百个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与新创建的元素,你需要确保你调用测量和排列。
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仍然是一个很好的选择,因为它是可预测的。