Ответы с форумов MSDN

Некорректная толщина линий в GDI+

Date: 21.10.2021 11:37:31

PageUnit должен влиять и на координаты и на толщину линий. Судя по приведенным картинкам, ранее он на толщину не влиял, и обновление исправило именно это. 

Message 20

Date: 21.10.2021 15:57:18

Я же в предыдущем сообщении именно это и объяснил, разве нет? Или вы имеете в виду, объяснить более подробно, с технической стороны? Этого я пока не могу. Непонятно, о каком обновлении речь, просмотрел последние обновления .NET Framework, там ничего про Graphics... Так что видимо, это какое-то изменение на стороне Windows (GDI+).

Message 19

Date: 22.10.2021 3:35:46

Похоже обновление KB5006670: https://docs.microsoft.com/en-us/answers/questions/589319/gdiplus-pen-constructor-change-of-behaviour-in-win.html . А вы толщину линий в коде как-то задаете? Или используется толщина по умолчанию?

Странно, что Microsoft пошли на несовместимые изменения, да еще в таком древнем продукте, как GDI+. Но, так или иначе, изменение выглядит правильным. В документации явно написано, что толщина линии в текущих единицах, а не в пикселах, и нулевая толщина соответствует единице. То есть при выборе миллиметров и толщины по умолчанию линия и должна быть толстой.

Message 18

Date: 22.10.2021 15:33:52

Понятно. И вам нужна толщина в 1 пиксель - как "сплошная тонкая" в ЕСКД. Думаю, многие разработчики инженерных приложений поступали так же, ибо размеры для чертежей нужны в миллиметрах, а про то, что толщина линий тоже в чем-то должна измеряться, просто не задумывались. Сейчас пойдет крик во всю ивановскую, так как это могло затронуть реально многих в этой сфере. Что примечательно, для Win 7 вышло аналогичное обновление, хотя она уже не поддерживается. Это уже совсем странно, что могло заставить Microsoft сделать это?

Самое правильное, вместо того, чтобы отменять использование миллиметров, думается мне, задать однопиксельную толщину как по документации: https://docs.microsoft.com/en-us/dotnet/desktop/winforms/advanced/types-of-coordinate-systems?view=netframeworkdesktop-4.8

Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX);


Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub