2011-05-03 5 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 -> Bitmap anyways). –

답변

1

새로 만든 요소와 함께 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는 TileBrushes에 대한 다음과 같은 Freezables, BitmapCacheCachingHint 그러나 RenderTargetBitmap가 좋은 선택이 여전히이 예측대로 조사 할 수있는 몇 가지 기능을 가지고 있습니다.

관련 문제