1
this 메서드를 사용하여 비트 맵에 캔바스를 렌더링하려고합니다.왜 내 모양이 큽니까. 캔버스에 두 배나 크기가 있습니까?
Canvas
에 Shape
을 추가하면 지정된 크기의 두 배로 렌더링됩니다. 아래 예에서
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) 내가 잘못하고있는 중이 야 무엇
?
것은 당신이 96 이외의 DPI를 전달하는 : 나는 당신의 코드를 실행하면
예, 저는 dpi = 200을 사용하고 있습니다. –
그것은 올바른 길로 인도했습니다. dpi가 이미지의 내용을 실제로 변경한다는 것을 알지 못했습니다. 방금 지정한 크기로 100 % 크기로 이미지가 렌더링 될 것입니다. Zoom –
200이 아닌 DPI 96을 사용해보십시오. –