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. Явно объявляйте эти числа как числа с плавающей точкой.

Другие вопросы по тегам