@Tolana

Как задавать длину линии в сантиметрах и рисовать такую линию (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;
}
Пожалуйста, кто с этим сталкивался, подскажите ссылки, источники, решение.
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
Nipheris
@Nipheris Куратор тега C#
В ваших расчётах вы не учли реальную плотность пикселей вашего монитора (physical PPI). Тот DPI, который вы вычислили, описывает некий эталонный монитор с 96 PPI, а реальный монитор может значительно отличаться. Иными словами, вы скорее получили информацию об установленном у вас масштабе экрана, и пока не соотнесли это с реальным физическим устройством, которое установлено конкретно у вас.

Если вы сейчас подключите себе проектор, то очевидно, что длина линии будет зависеть от расстояния от проектора до доски - тут уже проще померять длину некоторой эталонной линии (допустим, 500 пикселей), и по ней определить, сколько пикселей картинки приходится на сантиметр какой-либо поверхности (экран монитора, доска проектора). Соотв-но эту длину должен померять пользователь и ввести в вашу программу. С монитором чуть проще - возможно есть способ запросить у некоторых устройств отображения физический размер или физический PPI.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы