Как я могу заставить DrawGeometry рисовать линии пикселей устройства в WPF?

Я пытаюсь использовать DrawingContext.DrawGeometry, чтобы получить прямоугольник со сторонами шириной 1 пиксель устройства.

var geometry = (defined elsewhere from a Rect {0.0, 0.0, 8.0, 18.0})
var brush = new SolidColorBrush(Color.FromArgb(30, 0xff, 0xff, 0xff));

// Note: the pen is declared with a 1.0 thickness
var pen = new Pen(new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF)), 1.0)

drawingContext.DrawGeometry(brush, pen, geometry);

Я проверил, что Rect, с помощью которого я строю геометрию, представляет собой целые числа, а не дробные точки (проверено вручную), а Pen, с помощью которого я рисую геометрию, имеет ширину 1.0 единиц.

Проблема в том, что прямоугольник рисуется на экране шириной 2 пикселя устройства. Как я могу нарисовать этот прямоугольник на точных пикселях устройства? Я ожидаю, что при разрешении 96 точек на дюйм получится 1 пиксель.


person Factor Mystic    schedule 20.11.2011    source источник


Ответы (1)


Вы можете использовать DrawingContext.PushGuidelineSet для принудительное выравнивание рендеринга, когда это возможно.

Дополнительные сведения и пример кода см. в этом руководстве.

person Reed Copsey    schedule 20.11.2011
comment
Это немного неудобно, так как теперь я должен смотреть на отдельные прямоугольники, составляющие геометрию, но это работает. Хороший совет, спасибо. - person Factor Mystic; 21.11.2011