mantech 35 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба Приветствую. Возможно данная тема поднималась уже тут когда-то, но сходу что-то путное не нашел. Задача состоит в том, чтобы использовать для печати текста шрифты TrueType, вместо самопальных, растеризованных на компе и сохраненных в виде растровой матрицы. Так-то оно работает нормально, но в последнее время люди стали очень щепетильные ко всяким красявостям, и замена шрифтов на лету(без программ перекодировки и пр.) становится напряжным делом. Поэтому решил добавить функционал реалтайм растеризации непосредственно из .ttf файла. Сходу нашел только это https://blog2k.ru/archives/3530 Может есть что-то более легковесное? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба да, freetype тащить идея так себе. https://github.com/nothings/stb/blob/master/stb_truetype.h как промежуточный вариант, на компе можно распарсить ttf тем же freetype или стандартными виндовыми средствами, выдрать координаты вершин для каждого символа, и потом рендерить уже этот "свой" векторный шрифт, заодно даже Безье можно линейными отрезками resampling сделать, чтобы рендер упростить. От дополнительного конвертера в ПК это конечно не спасёт, но хоть весить будет не как растр и проблем с масштабированием не будет. HFONT f = CreateFontA(1000, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_TT_ALWAYS, PROOF_QUALITY, FF_DONTCARE, "arial"); SelectObject(hdc, f); BeginPath(hdc); TextOutA(hdc, 0, 0, "съешь ещё этих мягких французских булок", ???); EndPath(hdc); DeleteObject(f); pc = GetPath(hdc, 0, 0, 0); points = malloc(sizeof(POINT)*pc); types = malloc(sizeof(BYTE)*pc); GetPath(hdc, &points[0], &types[0], pc); ReleaseDC(0, hdc); Честный парсер ttf выглядит как-то страшно, туда столько всего напихано. Размер библиотеки freetype на это как бы намекает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 10 августа, 2020 Опубликовано 10 августа, 2020 (изменено) · Жалоба 3 часа назад, _pv сказал: От дополнительного конвертера в ПК это конечно не спасёт, но хоть весить будет не как растр и проблем с масштабированием не будет. Да это как-раз не проблема, памяти полно, а вот от компа как-раз бы и избавится, ибо поправить несколько циферок в конфиг-файле куда проще, чем запускать всякие конвертеры, парсеры и пр... Очень уж смахивает на линуксовый мазахизм, большинство с этим связываться в принципе не желает... Масштабирование, к тому же динамическое не нужно, размеры шрифта фиксированные и их не много (Это формы ГУЯ, у меня не графический редактор ) Идея вообще такая - при создании формы гуя, выбирается необходимый размер и тип шрифта, эти параметры записываются в конфиг, вместе с именем шрифта ttf. Затем, при запуске системы происходит растеризация нужного шрифта и используемых размеров в память, а потом уже программа печатает на экране, как обычный растровый шрифт. Ну потрачу я при старте секунды 2 на растеризацию, да и фиг с ним, зато удобно при проектировании и смене шрифтов... Изменено 10 августа, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 6 minutes ago, mantech said: Очень уж смахивает на линуксовый мазахизм, Нет, мазохизм - это ваши мучения, вместо -lfreetype 9 minutes ago, mantech said: размеры шрифта фиксированные и их не много Так растеризуйте все сразу и упакуйте LZMA - возможно, дешевле выйдет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 15 минут назад, aaarrr сказал: мазохизм - это ваши мучения, вместо -lfreetype А это-то тут причем, не спорю, под линуксом наверно проще подключить готовую либу, чем портировать ее потроха на контроллер, там другого мазохизма полно... 16 минут назад, aaarrr сказал: Так растеризуйте все сразу и упакуйте LZMA - возможно, дешевле выйдет. Так в этом и вопрос, как растеризовать стандартный шрифт в контроллере, а не на ПК... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 5 minutes ago, mantech said: там другого мазохизма полно... Так только кажется. 6 minutes ago, mantech said: Так в этом и вопрос, как растеризовать стандартный шрифт в контроллере, а не на ПК... На ПК имел в виду растеризовать. Если шрифтов и размеров не очень много, вполне вероятно, что набор растеризованных и упакованных займет в итоге меньше, чем freetype + кучка ttf'ов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба Только что, aaarrr сказал: На ПК имел в виду растеризовать. Если шрифтов и размеров не очень много, вполне вероятно, что набор растеризованных и упакованных займет в итоге меньше, чем freetype + кучка ttf'ов. Ладно, видимо мой посыл непонятен, постораюсь объяснить со стороны простого юзера... Вот естьу юзера автомат, с красивыми картинками, но через полгода ему они надоедают и он звонит в поддержку, типа картинки надоели - хочу новые, как изменить сами картинки - понятно, идешь к дизайнеру, говоришь, "хочу вот это только с перламутровыми пуговицами", дизайнер рисует нужные gif, jpeg, png... И дело в шляпе, юзер переписывает на своем ноуте, телефоне, неважно на чем, новые картинки поверх старых и радуется еще полгода... А вот со шрифтами гораздо сложнее - "вот моя жена сказала, что этот шрифт с завитушками выглядит красивее"... И началось, даешь юзеру мануал, где написано... Возьмите свой шрифт, установите конвертер, запустите... загрузите, выберите размеры, кодовую страницу, потом добавьте, еще размер... Потом сохраните в файл, затем запустите парсер, в командной строке задайте параметры, имя источника, получателя... Вот это я сравнивал с линуксовым мазохизмом. Вообщем после этого юзер долго думает и говорит "а попроще чего-то нет?"... И я согласен, проходить такой квест особо нет желания, даже меня иногда напрягает, куда проще сказать, открой ини-файл, найди там "старыйшрифт.ttf" и замени его на "шрифтсзавитушками.ttf"и будет тебе счастье, а если размер другой нужен, то поправь еще эти 4 циферки... 13 минут назад, aaarrr сказал: что набор растеризованных и упакованных займет в итоге меньше, чем freetype + кучка ttf'ов. Да я могу выделить под растр 2мегабайта, да хоть 4, есть место и упаковывать даже ничего не надо... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба Так бы и написали: "хочу, чтобы юзер мог свой ttf закидывать". Было бы понятно. Думаю, лучше задействовать libfreetype полностью (в смысле, без попыток что-то вычленить/переписать). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 5 minutes ago, mantech said: Вообщем после этого юзер долго думает и говорит "а попроще чего-то нет?"... И я согласен, проходить такой квест особо нет желания, даже меня иногда напрягает, куда проще сказать, открой ини-файл, найди там "старыйшрифт.ttf" и замени его на "шрифтсзавитушками.ttf"и будет тебе счастье, а если размер другой нужен, то поправь еще эти 4 циферки... aaarrr пытается донести что можно заранее отрендерить всевозможные атласы "старыйшрифт.png", "шрифтсзавитушками.png", и пусть пользователь их меняет в конфиг файле, а вот позволять пользователю лезть в файловую систему устройства, пусть даже чтобы шрифты поменять - не надо так делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 10 августа, 2020 Опубликовано 10 августа, 2020 (изменено) · Жалоба 4 минуты назад, _pv сказал: aaarrr пытается донести что можно заранее отрендерить всевозможные атласы "старыйшрифт.png", "шрифтсзавитушками.png", и пусть пользователь Во первых это немало работы, кто ее будет делать непонятно... Во вторых я не знаю, что хотят юзеры, тут очень хорошо подходит фраза "на вкус и цвет фломастеры разные", конвертировать все великое множество шритов, да еще и с разными размерами - это бред, ИМХО. А что не так с ФС? Обычная СД карта, с фат32, пусть пишет, ну сотрет что-нить или нарушит, система в кирпич не превратится, это не планшет с несъемным НАНДом... Нужные файлы шифрованы, проверяются по КС, что попало туда не впиндюрить... Изменено 10 августа, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 40 minutes ago, mantech said: Во первых это немало работы, кто ее будет делать непонятно... Во вторых я не знаю, что хотят юзеры, тут очень хорошо подходит фраза "на вкус и цвет фломастеры разные", конвертировать все великое множество шритов, да еще и с разными размерами - это бред, ИМХО. ну так соберите freetype, и посмотрите сколько отрендеренных шрифтов в этот же объём влезет. а для разных размеров есть SDF. ну или stb_truetype, он куда скромнее freetype должен быть, меньше/проще имхо не найти. нормальных шрифтов на самом деле не сказать чтоб великое множество, вон всякие читалки вроде kindle имеют десяток на выбор, при том что это читалка, и пользователь 100% времени непосредственно в эти буковки пялится, а вовсе не какой-то GUI и три надписи на кнопочках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 10 августа, 2020 Опубликовано 10 августа, 2020 · Жалоба 6 часов назад, _pv сказал: ну или stb_truetype, он куда скромнее freetype должен быть, меньше/проще имхо не найти. Интересный вариант, только я чет не понял, весь код в хидере что-ли воткнут? Оригинально))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться