Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
28.01.2019, 15:49
|
#1
|
Частый гость
Регистрация: 17.08.2017
Сообщений: 14
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Масштабирование шрифта
Доброе время суток.
Хотелось бы узнать, может кто пользовался или знает алгоритмы масштабирования шрифтов на микроконтроллере? Если да, буду очень благодарен ссылкам, коду, идеям и рекомендациям...
Планируется использовать свой, отрисованный шрифт.
Предполагается вывод на экран графики и текста. Но хранить наборы шрифтов разных размеров, считаю нецелесообразным. Хочется попробовать масштабирование...
В дальнейшем буду делать универсальную либу, которую можно будет использовать в разных проектах, с разными дисплеями.
зы при беглом посещении гугла, нашел мало полезного.
Из железа:
CPU: Nios II
Дисплейный модуль: NHD-4.3-480272EF-ASXV-CTP
Контроллер дисплея: ST7282T2
|
|
|
|
28.01.2019, 19:38
|
#2
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,260
Сказал спасибо: 11,170
Сказали Спасибо 3,860 раз(а) в 2,930 сообщении(ях)
|
Re: Масштабирование шрифта
egich92, если есть вычислительная мощность, то векторные шрифты решат все проблемы. При необходимости вполне можно хранить нужное во внешней последовательной памяти.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
01.02.2019, 19:03
|
#3
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Масштабирование шрифта
На практике, вам не нужно более трех размеров шрифта. Слишком большое разнообразие шрифтов вызывает некомфортное восприятие информации, особенно когда одновременно отображаются более трех разновидностей шрифтов в пределах одного экрана информации, и особенно на сравнительно небольшом дисплее 480х272 точки.
Один растровый шрифт среднего размера в 24-32 точки высоты и с полным набором символов (лат, русс, цифры, знаки) занимает от 9 до 16 кБ. Крупный (для такого дисплея) шрифт в 64 точки обычно используется только для цифр и некоторого набора знаков в виде + - и десятичных точек. Размер такого шрифта не превышает 8 кБ.
Таким образом, в подавляющем большинстве случаев (для такого дисплея) максимальный объем одного шрифта не превысит 20 кБ. Это под силу даже встроенной флеш-памяти многих микроконтроллеров. Но даже если и нет, то внешняя флеш на скоростном SPI выручит.
Внешняя SPI тут нужна будет еще и потому, что помимо шрифтов приходится хранить и графические растровые объекты. Красивую кнопочку легче перенести готовую, чем программно её отрисовывать.
И вот как раз такие объекты занимают гораздо больше места, чем шрифты. Ибо шрифты хранятся в однобитном упакованном (по 8 пикс в байте) формате, а растровые картинки - 2-3 байта на пиксель, раз в 20 больше.
Работая с графикой, вы скоро поймете, что заморочки с размером шрифтов - эт фигня, мелочь.
Как в практике встраиваемых систем приходится пренебрегать размером в пользу скорости прорисовки, сокращения затрат ресурсов на прорисовку. Внешняя скоростная QSPI флеш на 8-16-32 МБайт решает проблемы с хранением графики.
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
02.02.2019, 02:41
|
#4
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Масштабирование шрифта
Я ни разу не видел, чтобы растровые шрифты кто-то где-то масштабировал.
|
|
|
|
02.02.2019, 09:18
|
#5
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Масштабирование шрифта
я тоже. Оно того просто не стоит.
|
|
|
|
02.02.2019, 14:26
|
#6
|
Частый гость
Регистрация: 13.07.2006
Сообщений: 34
Сказал спасибо: 6
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: Масштабирование шрифта
Сообщение от Easyrider83
|
Я ни разу не видел, чтобы растровые шрифты кто-то где-то масштабировал.
|
Я масштабировал. Правда, не сколько шрифты, сколько графику в целом и на целое число без сглаживаний краёв. 25 лет назад, на Специалисте непосредственно перед выводом на матричный принтер. А на экран этого делать не следует - алиаз будет диким и отсюда красота вся поплывёт. Лучше отрисовать руками красиво под нужное разрешение.
|
|
|
|
02.02.2019, 18:24
|
#7
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Масштабирование шрифта
Ну, у топикстартера вообще там весьма экзотическое "железо". Программная эмуляция процессора на ПЛИС Альтера.
Для работы вы можете иметь коллекцию шрифтов разного размера и начертания. Много не надо, 20-30 штук перекроют большинство распространенных потребностей.
Самые ходовые шрифты для такого дисплея будут с высотой строки 16, 24 и 36 точек. Добавим один шрифт высотой 8 точек - для мелких надписей. Ну и еще парочку высотой 48-72 точек - для каких-нибудь крупных индикаторов.
Шрифты высотой более 80 точек для данного размера дисплея используются редко, и в основном только в виде цифр и некоторых знаков.
Таким образом, в одном проекте вы будете использовать от 3 до 6 шрифтов, причем, крупные шрифты будут с ограниченным набором символов. И фактически не будете выходить за рамки 50-100 кБ памяти.
Что касается выбора шрифтов:
Высота шрифта - это не высота символа. Это - высота строки, включающая надстрочные и подстрочные элементы букв. Высота заглавный букв обычно составляет около 2/3 высоты строки. В мелких шрифтах эта высота больше.
Для шрифтов высотой 24 и менее точек особое внимание нужно обращать на читаемость шрифта. Чем проще выглядит шрифт, тем легче он читается в мелком размере. Шрифты типа Times New Roman или другие с засечками - не подходят.
Также, хорошо выглядят пропорциональные шрифты, в которых ширина символа зависит от начертания. В противоположность моноширным шрифтам с одинаковой шириной всех символов.
Пропорциональные шрифты требуют особого способа хранения шрифта - для каждого символа имеется указание на его ширину, и при выводе читается значение ширины символа, и последующий символ сдвинется именно пропорционально ширине.
Выглядит красиво, но не всегда подходит, потому что горизонтальный размер текста будет непостоянен из-за разного содержания текста.
|
|
|
|
04.02.2019, 10:44
|
#8
|
Частый гость
Регистрация: 06.01.2011
Сообщений: 33
Сказал спасибо: 33
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: Масштабирование шрифта
Сообщение от NewWriter
|
Оно того просто не стоит.
|
Я бы поспорил.
Автору вкратце: потребуется более 1 бит на пиксель и специальные алгоритмы для предварительного пре-рендеринга шрифта (из вектора или сильно большего растрового разрешения) в специально закодированный растр, и специальный алгоритм для рендеринга с заданным масштабным коэффициентом. Подробнее здесь: https://gamedev.stackexchange.com/qu...g-it-pixelated.
|
|
|
|
04.02.2019, 21:16
|
#9
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Масштабирование шрифта
Можете конечно поспорить, но... Я уже говорил - толку особого нету во всех этих манипуляциях.
Шрифт со сглаживанием занимает в 8 раз (!) больше места, его вывод более ресурсоёмкий, его сложнее изготавливать. Вобщем, оно того просто не стоит.
Я уже всё описал-расписал. Вот картинка в доказательство: 4 шрифта от 8 до 44 точек высотой занимают чуть больше 18 кБ
Да, топикстартер вообще куда-то пропал...
|
|
|
|
07.05.2019, 23:59
|
#10
|
Гражданин KAZUS.RU
Регистрация: 07.05.2019
Сообщений: 753
Сказал спасибо: 67
Сказали Спасибо 145 раз(а) в 91 сообщении(ях)
|
Re: Масштабирование шрифта
Масштабировать можно только векторные. Если ресурсов много, можно из Nuklear выдрать рендерер TTF. Или еще откуда-нибудь, исходников хватает.
Для себя просто сделали нормальный формат растровых шрифтов, со сжатием, кернингом и т.п.
https://github.com/littlevgl/lv_font_conv
Просто берется нормальный фонт, и вытягиваются оттуда нужные глифы. Можно склеить несколько шрифтов, например прицепить иконки.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:17.
|
|