Используя метод this, я хочу отобразить холст в растровое изображение.Почему моя Shapes.Line в два раза больше, чем я хочу, чтобы она была на холсте?
Когда я добавляю Shape
в Canvas
, он отображается в два раза выше указанного размера.
В приведенном ниже примере, я рисование линии из (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;
}
Визуализированное изображение, которое я получаю 200 путем 200 точек большой, но диагональ идет вплоть до (100; 100)
Что я делаю неправильно?
Да, я использую dpi = 200. –
Это привело меня на правильный путь. Я не знал, что dpi на самом деле изменяет содержимое изображения, я думал, что это просто указано, какой размер будет отображаться на экране при 100%. Zoom –
Попробуйте использовать DPI 96, а не 200. –