WPF Pixels для настольных пикселей
В прошлом я был связан с этим ответом на аналогичный вопрос о преобразовании координат пикселей WPF в настольные, однако я не уверен, что понимаю математическую схему.
В удивительном ответе говорится, что "пикселей на единицу WPF = размер константы WPF Unit * разрешение монитора;" и что "постоянный размер блока WPF составляет 1/96".
В моем случае я взял DPI из графического объекта, который был создан из растрового объекта (поскольку я не смог найти свойство, о котором говорил Astonish), который я создал после создания снимка экрана рабочего стола, поэтому у меня есть:
Graphics g = Graphics.FromImage(bitmap);
float WpfUnit = (1 / 96) * g.DpiX;
Учитывая, что DPI, возвращаемое из графического объекта, равно 96, я остаюсь с
WpfUnit = (1 / 96) * 96 = 1
Однако WpfUnit выходит за 0 по неизвестной (для меня) причине. Единственный способ исправить это, это сказать
if(WpfUnit == 0) WpfUnit = 1;
И даже это на самом деле не решает проблему, так как значение высоты и верхние значения при умножении на WpfUnit, как предлагается в связанном ответе, ничего не сделали для них, кроме умножения на 1.
Итак, в заключение, я все еще застрял в преобразовании пикселей WPF в пиксели рабочего стола. Любая помощь по этому вопросу будет принята с благодарностью.
2 ответа
Как насчет встроенных методов PointToScreen и PointFromScreen? Или я что-то упустил?
WpfUnit выходит как ноль, потому что он делает целочисленную математику с 1/96. Явно объявляйте эти числа как числа с плавающей точкой.