none
Что изменил Microsoft в своем последнем обновлении в методах рисования? RRS feed

  • Вопрос

  • Здравствуйте,
    подскажите, кто знает, что изменил Microsoft методах рисования объекта Graphics, в последнем обновлении, которое было на прошлой неделе. У меня программа рисует фланцевое соединение и линии стали очень толстыми (см. скриншот 1) на компьютерах на которых обновили систему, а на тех, которые не обновлялись всё выглядит нормально (см. скриншот 2).

    Заранее благодарю за помощь

    скриншот 1

    скриншот 2



    • Изменено SergejS 19 октября 2021 г. 13:37
    19 октября 2021 г. 8:53

Ответы

  • Нашел почему возникает проблема, но не понятна причина ее возникновения, так как до обновления Windows годами все работало нормально, а теперь линии стали толстыми. В самом начале процедуры которая занимается рисованием я устанавливаю для объекта Graphics: grfx.PageUnit = GraphicsUnit.Millimeter, это приводит к толстым линиям, если закомментировать эту строку, то все рисуется как и прежде, с сохранением правильных пропорций. 
    • Помечено в качестве ответа SergejS 20 октября 2021 г. 6:16
    19 октября 2021 г. 13:20

Все ответы

  • Нашел почему возникает проблема, но не понятна причина ее возникновения, так как до обновления Windows годами все работало нормально, а теперь линии стали толстыми. В самом начале процедуры которая занимается рисованием я устанавливаю для объекта Graphics: grfx.PageUnit = GraphicsUnit.Millimeter, это приводит к толстым линиям, если закомментировать эту строку, то все рисуется как и прежде, с сохранением правильных пропорций. 
    • Помечено в качестве ответа SergejS 20 октября 2021 г. 6:16
    19 октября 2021 г. 13:20
  • Нашел почему возникает проблема, но не понятна причина ее возникновения, так как до обновления Windows годами все работало нормально, а теперь линии стали толстыми. В самом начале процедуры которая занимается рисованием я устанавливаю для объекта Graphics: grfx.PageUnit = GraphicsUnit.Millimeter, это приводит к толстым линиям, если закомментировать эту строку, то все рисуется как и прежде, с сохранением правильных пропорций. 
    Разница в том, что, как говориться - миллиметры, они и в Африке миллиметры. В отличие от пикселей, которые всегда имеют разные физические размеры и на экране линия толщиной в 1 px всегда будет выглядеть самой тонкой. А вот сколько пикселей будет в миллиметре - зависит от DPI экрана (но точно 1 px никогда не будет равен 1 мм). По умолчанию используются именно пиксели. Вы, явно задали миллиметры, но по какой-то причине они не задействовались. Обновление решило эту проблему и миллиметры стали выглядеть, как и положено. 

    Alexandr_Smirnoff

    20 октября 2021 г. 22:08
  • во-первый, в соответствии с документацией, дефолтное значение там не пиксел а World! Во-вторых, если бы все было так просто то мой рисунок не должен был бы отображаться правильно, так как я как передавал размеры в миллиметрах так и передаю, если холст измеряется в пикселах, а размеры фланцевого соединения в миллиметрах, то это должно приводить к несоответствию, а это не так!
    21 октября 2021 г. 6:47
  • PageUnit должен влиять и на координаты и на толщину линий. Судя по приведенным картинкам, ранее он на толщину не влиял, и обновление исправило именно это. 
    21 октября 2021 г. 11:37
  • эти методы и классы существовали в MS Framework изначально и не уверен что нужно было что то менять! И как вы мне объясните, что это изменение не влияют на отображение рисунка (единицы измерения не совпадают), но изменения видны только в толщине линий? 
    21 октября 2021 г. 11:43
  • Я же в предыдущем сообщении именно это и объяснил, разве нет? Или вы имеете в виду, объяснить более подробно, с технической стороны? Этого я пока не могу. Непонятно, о каком обновлении речь, просмотрел последние обновления .NET Framework, там ничего про Graphics... Так что видимо, это какое-то изменение на стороне Windows (GDI+).
    21 октября 2021 г. 15:57
  • на прошлой неделе было два обновление для Windows, после них программа стала работать иначе. Линии стали выводится на экране и при печати толстыми.
    21 октября 2021 г. 18:45
  • я сам не знаю, какой из обновление повлияло на поведение программы, но на компьютере на котором обновление не запускалось все работает как и прежде!
    21 октября 2021 г. 18:46
  • Похоже обновление KB5006670: https://docs.microsoft.com/en-us/answers/questions/589319/gdiplus-pen-constructor-change-of-behaviour-in-win.html . А вы толщину линий в коде как-то задаете? Или используется толщина по умолчанию?

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

    22 октября 2021 г. 3:35
  • Я использовал при создании пера конструктор Pen без указания толщины
    22 октября 2021 г. 7:59
  • Понятно. И вам нужна толщина в 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);

    22 октября 2021 г. 15:33