... — выглядит как гавно. Можно ли с этим что-то сделать? Конкретно, сценарий такой: темно-синяя полупрозрачная панель (непрозрачность — 80%, то есть, почти непрозрачная), поверх — белый текст Тахомой, 14px. Когда эта панель выводится над белым фоном, это выглядит вырвиглазно. Вокруг букв появляются какие-то черные разводы.
Почему я думаю, что дело в ClearType? Потому, что, во-первых, если его отключить, все достаточно зубчато, но этот мерзкий эффект исчезает. Во-вторых, в Inkscape используется какое-то свое сглаживание (оно не зависит от галки CT), похожее на адобовское, и в нем все то же самое смотрится вполне себе ничего.
Может, я CT неправильно готовлю? Точнее, не я, а либа, которую я использую. Я настраивал-настраивал CT, но текст как выглядет мерзостно, так и выглядит. Win8, если что.
Здравствуйте, Аноним, Вы писали:
А>... — выглядит как гавно. Можно ли с этим что-то сделать? Конкретно, сценарий такой: темно-синяя полупрозрачная панель (непрозрачность — 80%, то есть, почти непрозрачная), поверх — белый текст Тахомой, 14px. Когда эта панель выводится над белым фоном, это выглядит вырвиглазно. Вокруг букв появляются какие-то черные разводы.
Для правильной работы алгоритмов субпиксельного сглаживания (в том числе и ClearType) необходимо для каждого пикселя точно знать и цвет шрифта, и цвет фона под ним. У тебя ClearType думает, что фон синий, а на самом деле синий с белым. Отсюда результат.
Думаю, сделать ничего нельзя. Только если делать всю композицию, кроме текста, на битмапе. А затем поверх рисовать текст.
Здравствуйте, Аноним, Вы писали:
А>... — выглядит как гавно. Можно ли с этим что-то сделать? Конкретно, сценарий такой: темно-синяя полупрозрачная панель (непрозрачность — 80%, то есть, почти непрозрачная), поверх — белый текст Тахомой, 14px. Когда эта панель выводится над белым фоном, это выглядит вырвиглазно. Вокруг букв появляются какие-то черные разводы.
Как ты думаешь почему в Windows/Aero, в windows caption буквы на белом glow фоне?
В GDI ClearType ничего не знает про альфа канал. Поэтому ClearType средствами GDI всегда должен рисоваться на чем-то непрозрачном.
Иначе поуличишь вот такую лабуду как в caption здесь
Сравни с буквами на непрозначном фоне там же. Это все GDI и его ClearType
А теперь смотрим на ClearType в Direct2D/DirectWrite:
Видишь разницу? DirectWrite знает и умеет рисовать с альфой.
А>Может, я CT неправильно готовлю? Точнее, не я, а либа, которую я использую. Я настраивал-настраивал CT, но текст как выглядет мерзостно, так и выглядит. Win8, если что.
Sciter пользуй и будет тебе шастя.
Re[2]: ClearType и выворотка
От:
Аноним
Дата:
14.07.14 06:53
Оценка:
Здравствуйте, c-smile, Вы писали:
А>>Может, я CT неправильно готовлю? Точнее, не я, а либа, которую я использую. Я настраивал-настраивал CT, но текст как выглядет мерзостно, так и выглядит. Win8, если что.
CS>Sciter пользуй и будет тебе шастя.
А вы думали, про какую либу я говорю?
Кстати, а D2D у вас что, перерендерит текст на каждый move окна? Как он определяет, что фон под прозрачным окном сменился? Мало что про него знаю.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, c-smile, Вы писали:
А>>>Может, я CT неправильно готовлю? Точнее, не я, а либа, которую я использую. Я настраивал-настраивал CT, но текст как выглядет мерзостно, так и выглядит. Win8, если что.
CS>>Sciter пользуй и будет тебе шастя.
А>А вы думали, про какую либу я говорю?
Ну Sciter тоже разный бывает. Sciter v 1.*.*.* это GDI backend с проблемами которые я изложил.
Sciter 3.*.*.* это Direct2D (и GDI+ на XP).
А>Кстати, а D2D у вас что, перерендерит текст на каждый move окна? Как он определяет, что фон под прозрачным окном сменился? Мало что про него знаю.
"перерендерит текст на каждый move окна" — нет, зачем это?
Окно это bitmap c альфаканалом. Move окна (если на нем ничего не меняется по ходу) это просто translate(xpos,ypos) внутри GPU.
Крайне дешёвая операция. Да ты и сам можешь посмотреть в Process Explorer. Там CPU — 0% при перетаскивании окна.
Здравствуйте, c-smile, Вы писали:
CS>Окно это bitmap c альфаканалом. Move окна (если на нем ничего не меняется по ходу) это просто translate(xpos,ypos) внутри GPU. CS>Крайне дешёвая операция.
И все-таки откуда D2D берет фон? Он ведь в общем случае результат сложной композиции. Из фреймбуфера что ли?
Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, c-smile, Вы писали:
CS>>Окно это bitmap c альфаканалом. Move окна (если на нем ничего не меняется по ходу) это просто translate(xpos,ypos) внутри GPU. CS>>Крайне дешёвая операция.
W>И все-таки откуда D2D берет фон? Он ведь в общем случае результат сложной композиции. Из фреймбуфера что ли?
На прозрачных surfaces он переключается на gray scale alpha blending.
Поэкспериментируюй с sciter.exe и примером \sdk\samples\basics\test-font-rendering.htm