2013-07-22 5 views
1

기본적으로 차트를 이미지로 저장하여 PDF 보고서에 병합하려고합니다. WPF Toolkit 차트가 마음에 들면 양식에 표시되는 이미지를 저장할 수 있습니다. 그러나, 나는 백그라운드 서비스 일하고 있기 때문에, 우리는 표시하는 시각적 요소가없는, 따라서 나는 내 이미지 저장 코드로, 이미지를 저장하는 방법을 단서가 없다 :WPF Toolkit Chart : 이미지로 저장하는 방법

renderBitmap = new RenderTargetBitmap(400, 400, 96, 96, PixelFormats.Pbgra32); 
DrawingVisual isolatedVisual = new DrawingVisual(); 
drawing.DrawRectangle(new VisualBrush(mychart), null, new Rect(new Point(), bounds.Size)); 
renderBitmap.Render(isolatedVisual); 

검은 이미지 만 제공합니다에게. HEre mychart는 Chart 컨트롤이고 mychart를 창에 추가하면 차트가 잘 보입니다. 그래서 Chart 컨트롤이 작동 중임을 알았습니다. 윈도우 상에 없을 때 렌더링되지 않습니다.

편집 : 나는 또한하지만 여전히 빈 이미지 및 제어가 이미지에 렌더링되지 않습니다 받고

mychart.Measure(size); 
mychart.Arrange(new Rect(size)); 
mychart.UpdateLayout(); 

을.

+0

[link] (http://msdn.microsoft.com/en-us/library/ms788731.aspx) 시도해 보셨습니까? 이 예에서 특히 오프 스크린 버튼의 BeginInit 부분은 무엇입니까? – dowhilefor

+0

아니, 그것을 시도합니다. –

답변

1

블랙 이미지를 생성하는 RenderTargetBitmap과 동일한 문제가있었습니다.

나는이 방법을 사용 :

public static void SaveAsImage(
    FrameworkElement element, 
    string filepath, 
    int width, 
    int height) 
{ 
    element.Width = width; 
    element.Height = height; 
    element.Measure(new Size(width, height)); 
    element.Arrange(new Rect(0, 0, width, height)); 
    element.UpdateLayout(); 

    var target = new RenderTargetBitmap(
     width, height, 
     96, 96, System.Windows.Media.PixelFormats.Pbgra32); 

    target.Render(element); 

    var encoder = new PngBitmapEncoder(); 
    var outputFrame = BitmapFrame.Create(target); 
    encoder.Frames.Add(outputFrame); 

    using (var file = File.OpenWrite(filepath)) 
    { 
     encoder.Save(file); 
    } 
} 

내 문제는 내 FrameworkeElement이 .Show()가 '이전 에드 없었던 창 객체이었다이었다. 경고 나 예외는 없었습니다. 그냥 검은 이미지.

.Show()를 호출하면 모든 것이 예상대로 작동합니다.

SaveToImage(view); 

속으로 :

SaveToImage((FrameworkElement)view.Content); 

이것은 내 경우에는 문제를 해결

내 솔루션 변경하는 것입니다.