2011-05-03 95 views
2

我正在繪製由數百個GeometryDrawing對象組成的複雜圖像。繪圖速度非常快,但重新縮放速度很慢。我可以想象,重繪數百個對象需要一些時間。作爲解決方案,我想將我的繪圖變成位圖。WPF:複雜圖像的快速繪製/縮放

我試過以下,但這不起作用。結果圖像是空白的。

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

[System.Drawing.ImageConverter](http://msdn.microsoft.com/en-us/library/system.drawing.imageconverter.aspx)類應該處理它我相信(反正DrawingImage - >位圖)。 – 2011-05-03 14:00:35

回答

1

如果您將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的圖像元素的,所以你可以在多個地方使用它。

WPF有,因爲它是可預測的,你可能要考慮,如FreezablesBitmapCacheCachingHint爲TileBrushes然而RenderTargetBitmap仍然是一個不錯的選擇一些功能。