Direct2D интерфейс и размытый текст - PullRequest
5 голосов
/ 21 сентября 2011

Мое новое приложение будет иметь богатый интерфейс, который должен быть изменяемого размера на лету с использованием прозрачных значков / изображений и т. Д. Для этого приложения я пытаюсь принять решение использовать новый Direct2D API против старый добрый GDI. Одним из недостатков, конечно, является то, что он не работает на XP, хотя я нашел несколько более неприятных вопросов для решения:

  1. Я заметил, что вывод текста в среде Direct2D выглядит немного размытым (хотя продается как функция). Просто посмотрите на текст в Firefox 4 с включенным аппаратным ускорением (или IE9). Кажется, это связано с тем, что в Direct2D текст не привязан к (пиксельной) сетке , как GDI. Есть ли способ заставить Direct2D привязаться к пиксельной сетке и таким образом решить эту проблему?

  2. Действительно ли такое улучшение скорости? Я попытался понять эту статью, и из этого я понял, что в Windows 7 и XP (не Vista?) GDI уже аппаратно ускорен, где это возможно. Например. в моем приложении я использую много DC памяти, которые просто BitBlt установлены на место, а рисование прозрачных изображений / сглаженных линий и т. д. рисуется с помощью AlphaBlend. И последнее, безусловно, аппаратно ускорено, так как я измерял скорость во время тестирования своих подпрограмм.

Так куда бы вы положили свои деньги? Direct2D стоит хлопот, или вы просто придерживаетесь старого доброго GDI? Или вы бы предложили что-нибудь еще?

Примечание: я программирую на C ++, кстати, я не использую MFC.

Ответы [ 2 ]

5 голосов
/ 30 января 2012

Исправить вашу проблему очень просто. Direct2D имеет широкие возможности настройки, включая отображение текста и подсказки. Если вы хотите, чтобы он отображал текст в соответствии с рендерингом GDI (то есть с очень точным выравниванием пикселей), просто:

  • Вызовите функцию SetTextRenderingParams для цели рендеринга http://msdn.microsoft.com/en-us/library/windows/desktop/dd316898%28v=vs.85%29.aspx
  • Передайте IDWriteRenderingParams, для которого вы можете вызвать SetRenderingMode со значением GDI_CLASSIC или GDI_NATURAL (рекомендуется натуральное). Этот объект также может быть настроен различными другими способами, включая переменные ClearType, gamma и контрастность.

Так как другой ответ стал для него самым бесполезным и нанес удар по рендерингу в Direct2D, позвольте мне дать еще один обзор рендеринга текста в Direct2D. Это очень, очень хорошо. В отличие от Mac, где они в основном не намекают на шрифты, а текст на самом деле получается размытым, Direct2D по умолчанию сильно намекает только в направлении Y. Это имеет смысл, поскольку ваш монитор, вероятно, имеет разрешение около 96 точек на дюйм по вертикали, но с субпиксельным сглаживанием горизонтальное разрешение выходит за пределы разумного человеческого восприятия. Он также намного тоньше в использовании ClearType и подсказок, чем GDI. Края текста GDI имеют тенденцию быть очень красочными по сравнению с Direct2D. Я нахожу текст GDI очень резким в наше время и очень предпочитаю текст Direct2D в Firefox и IE для длительных сессий чтения.

Поэтому существует несколько причин, по которым режим по умолчанию может показаться вам «размытым».

  1. Прежде всего, найдите время, чтобы запустить программу настройки ClearType на панели управления. Вы будете поражены различием программ Direct2D.
  2. Независимо от того, насколько он хорош, он всегда будет казаться странным, если вы поместите его в текст приложения рядом с GDI-текстом. Попробуйте сделать все в пользовательском интерфейсе одним или другим, или четко отделить область содержимого от других областей. Если вы решили сделать все с GDI-разнесением, просто используйте метод, который я описал выше, чтобы установить Direct2D в режим с GDI-разнесенным текстом.
  3. Вы не установили все доступные обновления из Центра обновления Windows. Там было несколько для DirectWrite и IE. Убедитесь, что вы установили их все и перезапустите, чтобы увидеть улучшения.
  4. Вы просто еще не привыкли к этому.
  5. Это у тебя в голове. В самом деле. Как только вы начнете много думать о рендеринге текста, вы, вероятно, заметите «проблемы», которых здесь нет. Другой ответ на этот вопрос - прекрасный пример. Он утверждает, что считает текст в Visual Studio 2010 более размытым, чем в 2008 году, но на самом деле он составляет идеальных пикселей. Не веришь мне? Разработчики VS фактически предоставили некоторые сравнения самостоятельно. Могу поспорить, что вы не можете сказать разницу. http://blogs.msdn.com/b/text/archive/2010/03/05/additional-wpf-text-clarity-improvements.aspx
1 голос
/ 21 сентября 2011

Так же, как много программного обеспечения полагается на неизбежный шаг закона Мура, чтобы предложить все больше и больше лошадиных сил, GDI + и Direct2D, похоже, основаны на том факте, что разрешение экрана (плотность пикселей) будет продолжать улучшаться.Но дело в том, что плотность пикселей существенно не увеличилась и, на первый взгляд, достигла плато. Текст * GDI

был разработан с допущением, что разрешение - отстой.Выравнивание пикселей, намеки и более поздний рендеринг субпикселей (например, ClearType) - это хорошо продуманные компромиссы, которые взвешивают реальное ограничение читаемости на уровне 75–100 пикселей на дюйм по сравнению с универсальностью произвольных преобразований, таких как масштабирование и поворот.

Если бы наши экраны имели плотность пикселей ближе к тому, что могут производить современные принтеры, я был бы рад отказаться от этих компромиссов в пользу универсальности.Но мы не там.Мы даже не близко.Лично я нахожу редактор в VS 2010 гораздо менее читаемым, чем редактор в VS 2008, именно по этим причинам.

Что нужно учитывать: вам нужно беспокоиться о других устройствах, кроме экрана?Принтеры?Работает ли Direct2D с принтерами или вам все равно нужно внедрять решение GDI?Насколько важна Windows XP?Какое будущее вы хотите быть?Direct2D - это направление, в котором Microsoft пытается всех перевести.

Нечего не учитывать: скорость.Я еще не видел ни одного современного приложения, ограниченного скоростью рендеринга текста на экран, независимо от технологии.Это высоко оптимизированный путь.Фактическое расположение, вероятно, является гораздо более узким местом, чем установка значений пикселей на экране.Если вы анимируете масштабирование в полноэкранном режиме, возможно, вам нужен Direct2D - не для скорости, а для общих преобразований и плавного масштабирования.

...