실제로, Viewport3D
에서보기를 인쇄해야합니다. 분명히 RenderTargetBitmap
을 사용합니다. 문제는 렌더링 된 이미지의 해상도가 높으면 내 장면의 일부 삼각형이 최종 이미지에 나타나지 않는다는 것입니다.WPF의 RenderToBitmap 문제
예를 들어, 내 viewport
는 1024 * 768 수 있으며 내 RenderTargetBitmap
와 함께 사용하는 해상도가 3 배 viewport
의 해상도 될 것이다.
은 이미 내가 큰 규모를 사용할 때 사실, 삼각형이 표시되지 않습니다 ... 특정 방법으로 문제를 해결했다. 내 RenderTargetBitmap
의 크기를 낮추면 모든 것이 포함됩니다.
실제로는 1024 * 768은 96dpi입니다. 300dpi에 감동을주고 싶다면이 마지막 솔루션을 피하기 위해 거대한 이미지를 얻을 필요가 있습니다.
일부 코드 :
public static RenderTargetBitmap CaptureEcran(Viewport3D p_viewPort, int p_scale)
{
RenderTargetBitmap l_bmp;
p_scale = p_scale > 5 ? 5 : p_scale;
l_bmp = new RenderTargetBitmap(p_scale * Convert.ToInt32(p_viewPort.ActualWidth), p_scale * Convert.ToInt32(p_viewPort.ActualHeight), p_scale * 96.0, p_scale * 96.0, PixelFormats.Pbgra32);
DrawingVisual vis = new DrawingVisual();
DrawingContext dc = vis.RenderOpen();
dc.DrawRectangle(System.Windows.Media.Brushes.White, null, new Rect(0, 0, p_scale * p_viewPort.ActualWidth, p_scale * p_viewPort.ActualHeight));
dc.Close();
l_bmp.Render(vis);
p_viewPort.UpdateLayout();
l_bmp.Render(p_viewPort);
return l_bmp;
}
public static void SaveImage(RenderTargetBitmap renderTargetBitmap, string m_impression)
{
System.Windows.Forms.FolderBrowserDialog l_fBD = new System.Windows.Forms.FolderBrowserDialog();
l_fBD.ShowDialog();
string l_path = l_fBD.SelectedPath + "\\" + CurrentUser() + "__" + CurrentDate() + "__." + m_impression.ToLower();
FileStream stream = new FileStream(l_path, FileMode.Create);
BitmapEncoder l_encoder = null;
switch(m_impression){
case "PNG":
PngBitmapEncoder l_png = new PngBitmapEncoder();
l_encoder = l_png;
break;
case "JPEG":
JpegBitmapEncoder l_jpeg = new JpegBitmapEncoder();
l_jpeg.QualityLevel = 30;
l_encoder = l_jpeg;
break;
}
l_encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
l_encoder.Save(stream);
stream.Close();
}
내 호출은 다음과 같습니다
SaveImage(CaptureEcran(m_viewPortCourant.ViewPort3D,5), m_impression);
m_impression이 .png를하거나 드디어 뷰포트를 포함하고에 그려진 비주얼을 사용하여 작동