Jump to content

    
Sign in to follow this  
mantech

Изменение яркости пикселя

Recommended Posts

06.01.2022 в 22:04, mantech сказал:

Альфа канал для этого можно использовать

Вообщем, как и ожидалось, альфу тут использовать нельзя, ибо альфа - это коэффициент прозрачности, а не яркости. Чтобы его превратить в яркость, нужно на нижнем слое в тех же координатах отрисовать точку с базовым цветом, а уж потом изменять его прозрачность. Следовательно, данной точкой я испорчу картинку на нижнем слое, при том, что шрифт придется рисовать только на верхнем, что крайне неудобно, гораздо проще пересчитать цветовые составляющие, тем более, что там действительно не нужна плавучка. Минус тут только один - перед расчетом нужно прочитать пред. значение точки, что притормаживает вывод при больших размерах символов, т.к. экранная область сконфигурирована на ускорение записи, а не чтения...

Но правды ради, по сравнению со временем растеризации, потери на чтение незначительны, т.к. это нужно только для контурных точек.

Edited by mantech

Share this post


Link to post
Share on other sites
3 hours ago, mantech said:

Но правды ради, по сравнению со временем растеризации, потери на чтение незначительны

Так растеризацию достаточно выполнить один раз, а дальше использовать кэш.

Для вывода логично иметь отдельные функции для однородного и "сложного" фона.

Share this post


Link to post
Share on other sites
37 минут назад, aaarrr сказал:

Так растеризацию достаточно выполнить один раз, а дальше использовать кэш.

Кэш нужно довольно большой, т.к. наряду с символами высотой 20-30 пикс. используем и высоты по 150-200 пикс, что с учетом количества символов и нескольких типов шрифтов довольно накладно. Поэтому решил закэшировать только системный фонт, тот, который используется в настоечной форме гуя...

Да и не такое уж большое время занимает растеризация проверил, символ "0" с размером в 150пикс растеризуется за 150мксек.

Другой вопрос, на который пока не могу ответить, как выравнивать символы. Например цифры и большинство букв можно печатать напрямую, у них практически одна высота, но как быть с Q  или Й, У  запятой?

Share this post


Link to post
Share on other sites
49 minutes ago, mantech said:

Кэш нужно довольно большой

~1.5Мбайт на 224 символа с размером 150. Что тут экономить?

 

49 minutes ago, mantech said:

Другой вопрос, на который пока не могу ответить, как выравнивать символы. Например цифры и большинство букв можно печатать напрямую, у них практически одна высота, но как быть с Q  или Й, У  запятой?

Так при растеризации должны получаться x, y и advance.x, advance.y для каждого глифа.

 

Пример растеризации без и с гамма-коррекцией (не очень удачный, т.к. гамма для какого-то левого экрана):

glyph_A.bmp

glyph_O.bmp

Share this post


Link to post
Share on other sites
18 минут назад, aaarrr сказал:

x, y и advance.x, advance.y

x y - это я так понимаю высота и ширина, а что эти адвансы должны показывать ?

18 минут назад, aaarrr сказал:

Пример растеризации

У меня почти так и есть.. Экран с потертым резистивным тачем для отладки, поэтому и качество фотки не айс..

Безымянный.jpg

Edited by mantech

Share this post


Link to post
Share on other sites
2 hours ago, mantech said:

x y - это я так понимаю высота и ширина

Смещения относительно baseline.

 

2 hours ago, mantech said:

качество фотки не айс

Просто ничего не видно. Для такого размера гамма-коррекция уже не так актуальна, это на мелких шрифтах искажается форма.

Share this post


Link to post
Share on other sites
27 минут назад, aaarrr сказал:

Просто ничего не видно.

Да, не очень...

Вообщем, скажу я, ковыряться с этими шрифтами еще тот "кайф", путем ковыряния в исходниках нашел то, что у них называется основная линия (baseline), но это не то, что я думал, это линия основания шрифта, НО, у таких символов, как "q" или "у", эти закорючки внизу идут ниже этой линии, и они придумали descent-фактор, который нужно учитывать вниз от осн. линии... Вообщем посчитав все эти высоты и снижения наконец-то получил желаемый результат...

 

Безымянный.jpg

Share this post


Link to post
Share on other sites
1 hour ago, mantech said:

желаемый результат

Надписи сверху и посередине выглядят точно как кириллица в китаефоне - межсимвольные интервалы завышены и гуляют.

Share this post


Link to post
Share on other sites
1 минуту назад, aaarrr сказал:

межсимвольные интервалы завышены и гуляют

этим я еще не занимался, там просто по константе прибавляется, пока с высотами решал...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this