|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
||||||
[WPF] Сглаживание шрифта17.06.2017, 00:54. Показов 4448. Ответов 18
В моём приложении довольно часто используется текст малого размера (12-13 пт) - отображение просто ужасное.
Привожу пример своих настроек текста:
К сожалению, субпиксельное сглаживание здесь не помогает (ClearType). И не предлагает что-то мудить с TextOptions... Я почти все варианты перепробовал и выходит одинаково плохо )=
0
|
||||||
| 17.06.2017, 00:54 | |
|
Ответы с готовыми решениями:
18
Подключение шрифта в WPF
|
|
252 / 128 / 54
Регистрация: 04.05.2013
Сообщений: 346
|
|
| 17.06.2017, 11:33 | |
|
Честно говоря не вижу разницы между двумя вариантами. Что за задача то? UI нужно отобразить на большом экране с низким разрешением?
0
|
|
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 17.06.2017, 12:41 [ТС] | |
|
Нет. Просто отобразить на обычном экране. Вопрос скорее дизайнерский, но решение его программное)
Как же нет разницы? Разница - рябь букв. Лично мне это сильно заметно, когда текста побольше, а не пара букв. HF, Лучше не выглядит как ни крути. P.S. Используется WPF 4.5.
0
|
|
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 17.06.2017, 13:40 [ТС] | |
|
Вот ещё скрин
0
|
|
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 17.06.2017, 14:14 [ТС] | |
|
Разница очевидна (справа просто прекрасный шрифт)!
0
|
|
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
|
| 17.06.2017, 15:29 | |
|
Попробуйте SnapToDevicePixel="True"
0
|
|
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 17.06.2017, 15:32 [ТС] | |
|
Вы вообще вопрос прочли?
Добавлено через 56 секунд Видимо нет. Т.к. иначе вы бы увидели что привязка эта уже используется.
0
|
|
|
|
||||||
| 17.06.2017, 15:51 | ||||||
|
Могу только предложить ещё
0
|
||||||
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 17.06.2017, 15:54 [ТС] | |
|
Так не работает тоже.
Не знаю как вам, но лично мне разница на скрине глаза режет.
0
|
|
|
95 / 54 / 10
Регистрация: 16.09.2012
Сообщений: 207
|
|
| 21.06.2017, 01:47 | |
|
dm stark, В WPF шрифты, это всегда проблема.
Раньше бороться с этой проблемой можно было 2мя путями. Либо увеличивать шрифт, либо менять шрифт (для меня шрифт Калибри работал без нареканий). Напиши шрифт, который используешь ты. Кстати, лично для меня всегда работал TextOptions.TextFormattingMode=”Ideal” и без TextOptions.TextRenderingMode="ClearType ". Но я думаю, что ты уже всё это перепробовал) Если ты на 100% уверен, что у вас с касперским одинаковые шрифты используются, то нужно крутить только эти настройки. Так как wpf больше ничего не предоставляет. Хотя, понятное дело, что на качество отображения шрифтов в wpf влияет много факторов. Начиная тенями и заканчивая размытием и другими эффектами. Но у тебя этого, вроде бы, нет. Если шрифты разные, то совпадения результатов не будет.
0
|
|
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 21.06.2017, 11:39 [ТС] | |
|
Я не говорил, что у меня один и тот же с Касперским шрифт. Я как раз этого хотел бы.
Да, все настройки TextOptions я перепробовал. На данный момент использую Segoe UI и считаю, что вся проблема в нём. Я бы хотел определиться не столько с настройками, сколько найти нужный шрифт, для которого потом эти настройки я подберу. Так же, возможно, решение проблемы кроется в размере. Я использую (на изображении) размер в 12 px. Segoe UI при таком размере может искажаться.
0
|
|
|
95 / 54 / 10
Регистрация: 16.09.2012
Сообщений: 207
|
|
| 21.06.2017, 13:26 | |
|
dm stark, А, понял. Мне просто показалось, что ты уверен, что шрифты у вас одинаковые.
Я, в своём ответе выше, написал, что варианта у тебя только два: менять шрифт, либо менять размер шрифта. Настройки TextOptions у тебя в порядке. Я обычно просто оставляю TextOptions.TextFormattingMode="Display" и всё. Обычно этого достаточно. Я бы сглаживание вообще убрал (убрал бы TextOptions.TextRenderingMode="ClearType "). Но я все эти советы даю вслепую, поэтому, ясное дело, что нужно смотреть результат. Так же, я писал выше, что попробуй начать со шрифта Calibri. Раньше он себя хорошо зарекомендовал. Ну а вообще, перебирать шрифты можно бесконечно. Я уже не говорю о том, что касперские вполне могут использовать какой-нибудь покупной шрифт, которые они за деньги купили. Segoe UI да, использовать нельзя как мелкий шрифт. Он ведёт себя ужасно. Хотя сейчас, в WPF 4.5 ситуация с ним всё равно немного лучше. Добавлено через 21 минуту dm stark, Если общая концепция тебе позволяет, то постарайся заменить шрифт на другой. Если этого сделать нельзя, то попробуй увеличить и сделать шрифт не 12px, а 12.5px. Начни с малого и постепенно увеличивай (до разумных пределов), делай скриншоты и сравнивай с тем, что у тебя на 12 пикселях. Основная проблема, почему так происходит, это потому, что WPF использует свою прорисовку, которая отличается от прорисовки в приложениях, где используется прорисовка на основе GDI. GDI может изменять формы мелких букв и выравнивать их по границам пикселей. В WPF всё по другому. ПОэтому у тебя и размытие происходит. Потому что буквы не выровнены по границам пикселей. В WPF есть опция TextOptions.TextFormattingMode, установив которую в Display, можно добиться эффекта отображения текста в стиле GDI. Но если это не помогает, то у тебя только 2 варианта. Либо менять шрифт, либо увеличивать его размер. Если ты меняешь шрифт, то тут тоже нужно знать, что в WPF проблема со шрифтами комплексная. Она не касается какого-то одного шрифта. Она касается абсолютно всех шрифтов. Просто некоторые шрифты позволяют уменьшать себя чуть сильнее и не размываться, а некоторые шрифты вообще лучше не уменьшать. Но в конечном итоге, любой шрифт будет иметь размытость, просто в разной степени. Я уже не говорю о том, что размываться шрифт может по разному, в зависимости от разрешения экрана (на мониторе 96dpi ситуация одна, на мониторах с другим dpi ситуация может быть другой). Всё это плата за то, что WPF использует свою прорисовку, вместо GDI/GDI+. WPF использует DirectX и всё, что касается графики, проходит через directx. Благодаря этому получается выйгрыш от аппаратного ускорения, мы можем в WPF делать крутые переходы и градиенты, которые отображаются непосредственно видеокартой, а GDI так делать не может, он всю графику преобразует в инструкции рисования пикселей и поэтому отображение на GDI всегда значительно медленнее. И всё это далеко не все преимущества прорисовки WPF. Но за всё это приходится платить. И проблемы с размытием небольших размеров шрифтов, это одна из многих так "плат". По моему я тебе дал исчерпывающий ответ по твоей проблеме. Если еще вопросы будут, то пиши.
1
|
|
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 24.06.2017, 13:08 [ТС] | |
|
Спасибо за пояснения. Причина проблемы ясна.
Я попробовал, как вы и предложили, поменять размер текста с использованием шрифтов Segoe UI и Calibri. Ничего путного из этого не вышло. Может быть вы могли бы посоветовать ещё шрифты? Добавлено через 4 минуты И что интересно, в конструкторе окна шрифт отображает идеально. Добавлено через 19 секунд (В blend'е)
0
|
|
|
95 / 54 / 10
Регистрация: 16.09.2012
Сообщений: 207
|
|
| 24.06.2017, 16:48 | |
|
dm stark, Хорошо, попробуй Verdana, Tahoma.
Так же, виожешь попробовать остальные шрифты, которые оптимизированы под ClearType. Их название обычно начинается с буквы 'c': Cambria, Calibri, Corbel, Candara, Consolas и тд. Так же, насколько я помню Georgia должна вести себя адекватно. Я не советую тратить слишком много времени на эту задачу (учитывая, что ты уже потратил кучу времени на неё). Я бы на твоё месте просто выбрал бы наименее плохой результат из всех. А идеального отображения добиться очень сложно (уже объяснил почему). Хотя лично у меня, как я уже говорил, подобная проблема решалась и мне результат нравился (использовал шрифт вердана и калибри на 12,5 или 13 пикселей). Не знаю, может у меня просто глаз не такой дизайнерский)
0
|
|
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
||||||
| 23.07.2017, 13:24 [ТС] | ||||||
|
А знаете в чём была проблема на самом деле?
Оказывается, если положить текст в бордер с тенью, то текст значительно ухудшается:
Можно конечно просто добавить в этот Border Rectangle и для него делать тень, но это НЕ МОЙ СЛУЧАЙ. Тень должна быть именно для родительского элемента. Дело не в отображении.
0
|
||||||
|
|
||
| 23.07.2017, 14:55 | ||
|
0
|
||
|
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
|
|
| 23.07.2017, 15:01 [ТС] | |
|
Проблема глубже:
Добавлено через 1 минуту Не пойму о чём вы. Можно какие то свойства или типы объектов указать? Как я понял, вы предлагаете поустанавливать Panel.ZIndex в 0, -1, 1. Добавлено через 1 минуту Но ведь это ничего не решит...
0
|
|
|
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 1
|
|
| 13.12.2017, 12:40 | |
|
Я тоже уткнулся в эту проблему. Но у меня было чуть легче - часть окон имела нормальный вид текста, четкие буквы, а часть - неприятный, с зазубринами. Причем и шрифт, и все TextOptions в обоих случаях были одинаковыми, это было тщательно проверено. После долгих поисков, причину нашел: WPF can’t use ClearType when Window/Popup AllowsTransparency = true. This creates an HwndSource with UsesPerPixelOpacity = true (i.e. a layered window.)
0
|
|
| 13.12.2017, 12:40 | |
|
Помогаю со студенческими работами здесь
19
WPF Установка шрифта [WPF] Размер формы от шрифта и текста label и перемещение формы мышкой по label Изменение размера шрифта текста с разными размерами шрифта в RichTextBox Начать буквы малого шрифта от верха предыдущей большого шрифта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|