2016-07-21 1 views
1

this 메서드를 사용하여 비트 맵에 캔바스를 렌더링하려고합니다.왜 내 모양이 큽니까. 캔버스에 두 배나 크기가 있습니까?

CanvasShape을 추가하면 지정된 크기의 두 배로 렌더링됩니다. 아래 예에서

, 난에서 선 드로잉하고 (0, 0) (50; 50)의 크기 (200)의 캔버스 200

public bool exportToBmp(string path, int dpi = 96) 
    { 
     if (path == null) 
      return false; 

     var canvas = new System.Windows.Controls.Canvas(); 

     // This diagonal Line should span a quarter of the rendered Image 
     var myLine = new System.Windows.Shapes.Line(); 
     myLine.Stroke = System.Windows.Media.Brushes.LightSteelBlue; 
     myLine.X1 = 0; 
     myLine.X2 = 50; 
     myLine.Y1 = 0; 
     myLine.Y2 = 50; 
     myLine.StrokeThickness = 2; 
     canvas.Children.Add(myLine); 

     canvas.Height = 200; 
     canvas.Width = 200; 
     Size size = new Size(canvas.Width, canvas.Height); 

     canvas.Measure(size); 
     canvas.Arrange(new Rect(size)); 

     var width = (int)canvas.ActualWidth; 
     var height = (int)canvas.ActualHeight; 

     RenderTargetBitmap bmp = new RenderTargetBitmap(width, height, dpi, dpi, PixelFormats.Pbgra32); 
     bmp.Render(canvas); 

     PngBitmapEncoder image = new PngBitmapEncoder(); 
     image.Frames.Add(BitmapFrame.Create(bmp)); 
     using (Stream fs = File.Create(path)) 
     { 
      image.Save(fs); 
     } 

     return false; 
    } 

의해 I 얻을 렌더링 된 이미지가 200 인 (200) 큰 PX하지만 대각선에있는 모든 방법 간다 (100, 100) 내가 잘못하고있는 중이 야 무엇

output Bitmap

?

enter image description here

것은 당신이 96 이외의 DPI를 전달하는 : 나는 당신의 코드를 실행하면

답변

2

, 나는 다음과 같은 이미지 (테두리 명확성을 위해 추가)를 참조하십시오?

컴퓨터에서 사용중인 DPI 설정은 무엇입니까?

+0

예, 저는 dpi = 200을 사용하고 있습니다. –

+0

그것은 올바른 길로 인도했습니다. dpi가 이미지의 내용을 실제로 변경한다는 것을 알지 못했습니다. 방금 지정한 크기로 100 % 크기로 이미지가 렌더링 될 것입니다. Zoom –

+0

200이 아닌 DPI 96을 사용해보십시오. –

관련 문제