Как задавать длину линии в сантиметрах и рисовать такую линию (C# в WPF на Canvas)?
Делаю так, програмно получаю значение dpi (по оси ОХ и по оси ОY равно 144), преобразую в точки (вирт.пиксели) на сантиметр (равно 56,69 точек\см), от заданной длины в сантиметрах (например, 10 см) перехожу в длину в точках (равно 566,93), рисую эту линию на Canvas - в результате длина этой линии (в см) процентов на 30 (меряю обычной линейкой) больше исходно заданной длины в см. Это не устраивает!
Mасштаб экрана установлен 150%. Разрешение дисплея 1920*1080.
Значение dpi (точек на дюйм) определяю так
PresentationSource source = PresentationSource.FromVisual(this);
double dpiX = -1, dpiY = -1;
if (source != null)
{
dpiX = 96.0 * source.CompositionTarget.TransformToDevice.M11;
dpiY = 96.0 * source.CompositionTarget.TransformToDevice.M22;
}
Пожалуйста, кто с этим сталкивался, подскажите ссылки, источники, решение.
В ваших расчётах вы не учли реальную плотность пикселей вашего монитора (physical PPI). Тот DPI, который вы вычислили, описывает некий эталонный монитор с 96 PPI, а реальный монитор может значительно отличаться. Иными словами, вы скорее получили информацию об установленном у вас масштабе экрана, и пока не соотнесли это с реальным физическим устройством, которое установлено конкретно у вас.
Если вы сейчас подключите себе проектор, то очевидно, что длина линии будет зависеть от расстояния от проектора до доски - тут уже проще померять длину некоторой эталонной линии (допустим, 500 пикселей), и по ней определить, сколько пикселей картинки приходится на сантиметр какой-либо поверхности (экран монитора, доска проектора). Соотв-но эту длину должен померять пользователь и ввести в вашу программу. С монитором чуть проще - возможно есть способ запросить у некоторых устройств отображения физический размер или физический PPI.
Да, ситуация состоит в том, что длина нарисованной линии в сантиметрах превышает процентов на 30 длину исходно задаваемой линии. Поэтому я и пытаюсь найти такие параметры экрана (с учетом заданного масштаба), которые можно определить программно и которые позволят точно переходить от длины в сантиметрах в длину в пикселях (или точках), т.к. параметрами методом рисования линии являются координаты в пикселях (точках).