为什么我的 Shapes.Line 是我希望它在 Canvas 上的两倍大小?

Why is my Shapes.Line twice the size I want it to be on Canvas?

使用 this 方法,我想将 canvas 渲染为位图。

当我将 Shape 添加到 Canvas 时,它会呈现指定大小的两倍。

在下面的示例中,我在大小为 200 x 200 的 canvas 上画了一条从 (0;0) 到 (50;50) 的线。

    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;
    }

我得到的渲染图像是 200 x 200 像素大,但对角线一直延伸到 (100;100)

我做错了什么?

当我 运行 你的代码时,我看到了下图(为清楚起见添加了边框):

您传递的 DPI 不是 96 吗?

您的计算机上使用的是什么 DPI 设置?