2016-10-26 1 views
0

Я пытаюсь установить размер объекта диаграммы в миллиметр в C#, используя следующий код:Как установить размер MS диаграммы в миллиметрах вместо пикселя в C#

var chart = new Chart(); 
chart.RenderingDpiX = 300; 
chart.RenderingDpiY = 300; 
chart.CreateGraphics().PageUnit = GraphicsUnit.Millimeter; 
chart.Size = new Size(290, 200); // meant to be 290 millimetre not pixel 
... 
chart.SaveImage(@"D:\Temp\tttt.png", ChartImageFormat.Png); 

Я ожидаю, что размер сохранен изображение должно быть около 290 * (300/254) = 3425 пикселей, тогда как размер изображения составляет 290 пикселей на 200 пикселей?

Я также попытался установить блок страницы в postPaint случае использования

private void ChartPostPaint(object sender, ChartPaintEventArgs e) 
{ 
    var g = e.ChartGraphics.Graphics; 
    g.PageUnit = GraphicsUnit.Millimeter; 
} 

Но это не сработало! Не могли бы вы помочь мне установить размер диаграммы в миллиметрах или дюймах вместо пикселя?

+0

Из официальной документации класса Chart не существует вариант, который говорит, что вы можете использовать мм как единица измерения. Вы пытались создать метод, который сделает это для вас? – eg16

+0

MM - физическая единица и имеет смысл только при печати. Если вам нужен определенный размер пикселя с определенным разрешением dpi, вы можете сделать это, но на экране это просто не имеет смысла. Настройка. [RenderingDpiX/Y] (https://msdn.microsoft.com/en-US/en-en/library/system.windows.forms.datavisualization.charting.chart.renderingdpix%28v=vs.110%29. aspx) не предназначен для использования вами! Лучше всего используйте DrawToBitmap и setResolution на изображении, а затем сохраните! Также: никогда не используйте CreateGraphics – TaW

ответ

0

Из документации Chart() кажется, что единица измерения по умолчанию - px.
Но вы можете использовать px как вход для метода, который может дать вам значение на mm.
Для этого можно было бы написать:

private double toMM(int _px) 
{ 
    return this._px*(300/254); 
} 

Итак, теперь вы бы что-то вроде:

chart.Size = new Size(toMM(290), toMM(200)); 
Смежные вопросы