为什么我的 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 设置?
使用 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 设置?