Easyelectronics.ru

Электроника для всех
Текущее время: 24 сен 2020, 19:43

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Конвертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 10:32 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
https://github.com/littlevgl/lv_font_conv

Нужен был "легкий" формат, который бы позволил рендерить шрифты на эмбедах с ограниченными ресурсами. Пришлось делать свой, т.к. ни один из существующих не поддерживает ВЕСЬ набор необходимых фич. Конвертор условно можно разбить на 2 части:

  1. Описание бинарного формата, чтобы желающие могли встраивать куда угодно (обычно в графические библиотеки).
  2. Утилиту на node.js, которая генерирует из TTF-шрифтов описанный формат.

Что поддерживается:

  • Aнтиалиасинг, с регулируемой точностью (от 2 до 8 бит на градацию серого). Обычно достаточно 3 бит на пиксель.
  • Кернинговые пары.
  • Субпиксельное сглаживание.
  • Сжатие. Актуально для "больших" размеров от 16px, и субпиксельного сглаживания.
  • Вырезание нужного набора глифов и склейка результата из нескольких шрифтов.

Фичи можно использовать выборочно, в зависимости от ресурсов процессора и памяти.

Это все реально работает, и в настоящий момент поддерживается библиотекой LittlevGL. Тут можно посмотреть фото, как в реале выглядят 14px и 16px шрифты с субпиксельным сглаживанием, на дисплее 0.96".


Последний раз редактировалось p_v 29 мар 2020, 10:50, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 20:50 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4335
Откуда: г. Липецк
p_v писал(а):
...
  1. Описание бинарного формата, чтобы желающие могли встраивать куда угодно (обычно в графические библиотеки).
  2. Утилиту на node.js, которая генерирует из TTF-шрифтов описанный формат.
...

Не понравилось "встраивать куда угодно" и "Утилиту на node.js", не очень стыкуется. ИМХО.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 22:30 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
Ваше мнение меня очень волнует, держите в курсе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 22:34 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4335
Откуда: г. Липецк
Характерный ответ, неприятие критики, зачем тогда вообще рот раскрывал?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 22:53 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
Надеялся что вы более умный, сами поймете что у меня нет времени на интеллектуальный уровень "какой языг лучше", и самостоятельно свалите в туман.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 23:09 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4335
Откуда: г. Липецк
p_v писал(а):
...свалите в туман.

Вот честно, продолжать треп не хочу, тем более свой интеллектуальный уровень вы подтвердили использованием сторонней утилиты. На другом языке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 23:21 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
Комментарии каждого местячкового мамкиного эксперта на полезность проекта влияют чуть менее чем никак. Но опенсорсы открыты для всех, каждый вносит свой вклад как может. Вы вот тоже внесли, что смогли, и как сумели. Бывает, ага.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 23:25 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4902
Откуда: Кемеровская область, Киселевск
каким макаром будет работать Aнтиалиасинг и Субпиксельное сглаживание в связке STM32 + ILI9341 + DMA? Требуется фрейбуфер, чтение GRAM? Плюс добавим к этому нагрузку на CPU которая неизвестно сколько жрать будет. Без оптимизации под архитектуру это шлак и не имеет ценности. Еще и либу LittlevGL тянуть надо.

_________________
RADIOWOLF.RU


Последний раз редактировалось Oxford 28 мар 2020, 23:39, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 23:27 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 377
Интересно, субпиксельное сглаживание работает при повороте дисплея?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 23:37 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
Oxford писал(а):
каким макаром будет работать Aнтиалиасинг и Субпиксельное сглаживание в связке STM32 + ILI9341 + DMA?


Давайте определимся с терминологией, чтобы точно знать что говорим об одном и том же.

  • Антиалиасинг - это когда избражение не черно-белое, а с "серыми" точками по краям. И пиксели отвечают за прозрачность.
  • Субпиксельное глаживание - это когда картинка по горизонтали в 3 раза шире, а каждая точка мапится не на [RGB] а на [R], [G], [B] (если очень сильно упрощать).

То есть, вам в любом случае надо сначала делать композинг на фон, а потом пересылать. DMA и ILI9341 с композингом не помогут.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 23:41 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 377
Oxford, на самом деле субпиксельное сглаживание не настолько сложное, чтобы сильно грузить CPU. Мне больше интересны технические подробности. Например, каким образом либа берёт цвет пикселя фона при антиалиасинге или субпиксельном сглаживании? Хотя, можно догадаться, что цвет фона задаётся фиксированным при выводе текста. Ну и интересно, для повёрнутого дисплея надо генерировать новый набор шрифтов или подойдёт старый?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 23:44 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
ArtDen писал(а):
Интересно, субпиксельное сглаживание работает при повороте дисплея?

Нет конечно. Оно работает только в том направлении, в котором расположены R,G,B. А практический смысл имеет только по горизонтали.

Там еще в рендерере всякие тонкости с фильтрацие есть, но пока ни у кого руки не дошли списаться с авторами FreeType и попросить чтобы научили как правильно делать. Но даже то как сейчас в lvgl - сильно лучше чем без.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 23:57 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4902
Откуда: Кемеровская область, Киселевск
ArtDen писал(а):
Oxford, на самом деле субпиксельное сглаживание не настолько сложное, чтобы сильно грузить CPU. Мне больше интересны технические подробности. Например, каким образом либа берёт цвет пикселя фона при антиалиасинге или субпиксельном сглаживании? Хотя, можно догадаться, что цвет фона задаётся фиксированным при выводе текста. Ну и интересно, для повёрнутого дисплея надо генерировать новый набор шрифтов или подойдёт старый?


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

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 28 мар 2020, 23:58 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
ArtDen писал(а):
Oxford, на самом деле субпиксельное сглаживание не настолько сложное, чтобы сильно грузить CPU. Мне больше интересны технические подробности. Например, каким образом либа берёт цвет пикселя фона при антиалиасинге или субпиксельном сглаживании? Хотя, можно догадаться, что цвет фона задаётся фиксированным при выводе текста.

Универсального ответа и рецепта нет. Могу сказать только про lvgl. Там фреймбуфер на 10-20 строк, и экран рендерится за много проходов. Соответственно, гуй знает, как расположены слои виджетов, и когда надо рисовать буквы, под ними уже все готово. Ну а дальше уже миксируем точку фонта с пикселем дисплея или с отдельным каналом пикселя если сглаживание субпиксельное. Там есть какие-то более продвинутые техники, но я особо не вникал.

ArtDen писал(а):
Ну и интересно, для повёрнутого дисплея надо генерировать новый набор шрифтов или подойдёт старый?

Хм... наверное для поворота можно среднеарифметичекое взять для каждых 3 пикселей. Типа, на лету сколхозить "обычный" фонт. Потому что вертикальное субпиксельное сглаживанини визуально почти ничего не улучшит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 00:08 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
Oxford писал(а):
Вот надо узнать с какой аппаратурой работает, какие связки поддерживает, какая производительность и т.д. где спецификации.

Ммм... спецификации - по ссылке. Производительность - не совсем по адресу вопрос. Но lvgl без "морганий" работает, а детально лучше самому смотреть, под свои конкретные обстоятельства. Только компрессию для lvgl не включайте, там в разжималке с производительностью сильно накосячили, и пока не довели до ума.

Oxford писал(а):
К тому же это все завязано на какую то либу стороннюю.

Бинарный формат и конвертор НИКАК не завязаны на стороннюю либу. Сторонняя либа - это способ убедиться "прямщаз" что получилось не фуфло и реально работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 00:10 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4902
Откуда: Кемеровская область, Киселевск
У меня только DMA есть канал и все. как я выведу текст на дисплей без либы то? Драйвер только дисплея есть, нужна еще графическая библиотека которая будет выводить все это. И что значит в битмапный формат, он что в картинку BMP шрифт гонит? И ты потом просто картинки копируешь на экран?

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 00:34 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 377
Oxford, если твой дисплей не поддерживается, то вроде как надо сделать свою реализацию дисплея, как описано тут: https://docs.littlevgl.com/en/html/port ... lay-driver

Посмотрел эту либу. Слишком жирно для моих целей...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 00:47 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
Oxford писал(а):
У меня только DMA есть канал и все. как я выведу текст на дисплей без либы то? Драйвер только дисплея есть, нужна еще графическая библиотека которая будет выводить все это. И что значит в битмапный формат, он что в картинку BMP шрифт гонит? И ты потом просто картинки копируешь на экран?

Ну давай от печки. Тебе в любом случае нужна библиотека. Либо графическая (которая рисует линии и буковки) либо гуй (которая рисует интерфейсы и обеспечивает взаимодействие).

Формат не битмапный а бинарный (потому что набор байтов, бывает текстовый еще). Вот же: https://github.com/littlevgl/lv_font_co ... nt_spec.md. Из него строится картинка, состоящая из альфа-канала. И корректируется смещение по таблице кернинга.

Вообще, конкретно под lvgl делается текстовый формат, потому что мы с разработчиками сильно не сошлись во мнениях, а мне важнее было ехать, чем шашечки и доказательство собственной правоты. Но для желающих делать рендерер я настоятельно рекомендую бинарный формат.

Если у тебя исключительно черный или белый фон - можешь и ручками в дисплей слать, там композинг не нужен (вырожденный). Но я бы не советовал долбаться на таком низком уровне. Лучше добавить поддержку в какой-нибудь Adafruit-GFX, u8g2, или юзать lvgl где уже все есть.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 01:11 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
ArtDen писал(а):
Посмотрел эту либу. Слишком жирно для моих целей...

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

Агитировать за lvgl никого не собираюсь. Он тут упомянут только для наглядной демонстрации качества картинки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 10:21 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Да, а что такое "Ковертор"?
Вообще, в шрифте со сглаживанием нет ничего инновационного или необычного. Сохраняете их как битмапы в градациях серого, а потом выводите как обычные битмапы в градациях серого, используя битмапу как маску для смешивания цвета фона и цвета шрифта. Просто у вас шрифт будет занимать в несколько раз больший объем, либо для субпиксельного сглаживания в несколько раз больше ресурсов потребуется, что далеко не для каждого эмбедда подойдет. И это уж стопудово будет не "легкий формат"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 11:04 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
BusMaster писал(а):
Да, а что такое "Ковертор"?

Спасибо :). Поправил.

BusMaster писал(а):
Вообще, в шрифте со сглаживанием нет ничего инновационного или необычного. Сохраняете их как битмапы в градациях серого, а потом выводите как обычные битмапы в градациях серого, используя битмапу как маску для смешивания цвета фона и цвета шрифта. Просто у вас шрифт будет занимать в несколько раз больший объем, либо для субпиксельного сглаживания в несколько раз больше ресурсов потребуется, что далеко не для каждого эмбедда подойдет. И это уж стопудово будет не "легкий формат"

Ну вот описанная спека и тулза решают эти проблемы, и многие другие, о которых вы не написали.

Полный жизненный цикл разработки требует [конвертилку, хранилку, рисовалку]. Вероятность что найдется разработчик, компетентный везде, и который сделает сразу все, качественно, опенсорсно и бесплатно - около нуля. С тем что уже есть, остается только "рисовалки" пилить. Если подойдет lvgl - там уже все готово.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 14:51 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4902
Откуда: Кемеровская область, Киселевск
BusMaster писал(а):
Да, а что такое "Ковертор"?
а потом выводите как обычные битмапы в градациях серого, используя битмапу как маску для смешивания цвета фона и цвета шрифта. "


Битмапы придется хранить во внешней памяти, а это тормоза опять. Это надо будет считывать с внешней памяти картинку шрифта, смешивать в буфере ОЗУ с учетом текущего фона и потом буфер сливать через DMA. И буфер нужен будет с размером экрана. Тормозной способ рендера.

p_v т.е. вы халяву хотите? Платить за хороший продукт не хотите? Если халява то это только самим разрабатывать.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конвертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 15:03 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Конечно тормозной и накладный способ. Годится только на экранах с большим пиксельным шагом, чтоб бездумная растрата ресурсов хоть как-то грела душу гладкой картинкой.
Шрифт с полным набором (рус, лат, цифры, знаки) содержит порядка 150 символов. Шрифт высотой 16 со сглаживанием будет иметь размер... эээ... прикидочно 30 кБ. Выводиться будет как обычная битмапа в град.серого. Можно уменьшить градации до 4 или 2 битов на пискель, усложнив распаковку массива. Некратные числа битов нежелательны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ковертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 15:56 
Только пришел

Зарегистрирован: 08 май 2019, 01:20
Сообщения: 22
Предлагаю не сочинять отсебятины "как бы я делал фонт если бы захотел и умел", не подкрепленные практикой. Практической пользы от этого нет. Есть реальный конвертор, где можно посмотреть размеры и задать вопросы если что-то непонятно.

16px Roboto 0x20-0x7F, 3bpp, с кернингом, субпикселями и легким сжатием => 8400 байт. Это объективная реальность. Много это или мало - субьективная оценка, без какой либо пользы. Каждый решит сам, исходя из своих требований и задач.

Oxford писал(а):
p_v т.е. вы халяву хотите? Платить за хороший продукт не хотите? Если халява то это только самим разрабатывать.

Объясните мне, в чем смысл говорить автору конвертора, который его написал и со всеми поделился, что он хочет халявы и не хочет платить? Вы там обдолбались что ли?


Последний раз редактировалось p_v 29 мар 2020, 16:37, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конвертор TTF шрифтов в битмапный формат
СообщениеДобавлено: 29 мар 2020, 16:36 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Хм. Молодой человек, некоторые из нас делали фонты когда вы еще св.диодиком мигали :)))
К слову, 16-й шрифт без сглаживания, на 150 символов - занимает 4,5 кБ. А уж по скорости вывода и подавно.
Но да, красивость - есть красивость. Если нужно "вау" и есть лишние ресурсы, то пущщай. Был бы толк. Сомневаюсь, что кто-то на 0,96" дисплейчике, затянутом прозрачной термоусадкой, кто-то особо заметит это "вау".


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB