Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вс апр 23, 2017 6:51 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 118 сообщений ]  На страницу Пред. 14 5 6 7 8 След.
Автор Сообщение
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пн сен 28, 2009 11:43 am 
Не в сети
Kernel Optimizer
Аватара пользователя

Зарегистрирован: Пн янв 16, 2006 7:58 pm
Сообщения: 657
Albom писал(а):
вот мой вариант библиотеки для работы со шрифтами.
работает с растровыми шрифтами формата psf.
рекомендуется при использовании библиотеки gb_lib.


Запустить не удалось, ни под эмулятором, ни под виртуальной машиной.


Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пн сен 28, 2009 12:51 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 896
Из исходников библиотеки я понял, что:
1)в /sys/lib/ нужно поместить gblib.obj(я нашёл на FTP) и psf_font.obj
2)в /sys/fonts/ пестить cp866-8x16.psf (этот шрифт задан в исходнике примера). Соответственно для загрузки других шрифтов нужно менять название файла шрифта в исходнике и перекомпилировать программу.

Судя по исходникам формат шрифта простой, поэтому нет смысла писать декодер на C. Лучше писать на ассемблере. Будет и быстрее работать и компактнее будет код.

_________________
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!


Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пн сен 28, 2009 1:27 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 750
andrew_programmer писал(а):
Из исходников библиотеки я понял, что

всё правильно. мне надо было написать хоть какую-то документацию, но не было времени - готовился к экзамену.
andrew_programmer писал(а):
Судя по исходникам формат шрифта простой, поэтому нет смысла писать декодер на C. Лучше писать на ассемблере. Будет и быстрее работать и компактнее будет код.

Скорее всего, что перепишу сам. Хотя от посторонней помощи не отказался бы. :) Формат файла - простейший. Сначала идёт заголовок - 2 магических числа, потом режим (пока не разобрался что означает) и высота символа. После заголовка идут битмапы (1 бит на пиксель) символов. Т.е. если высота симовола 16 - то на символ идёт 16 байт, если 14 - то 14 байт. В принципе, есть системная ф-ция, позволяющая выводить изображения с палитрой, но я использую свою библиотеку (gb_lib) потому, что она работает быстрее (все операции производятся с буфером, а не экраном) и там есть функция для копирования изображений с прозрачным цветом.


Вернуться к началу
 Заголовок сообщения: Вышли свободные шрифты
СообщениеДобавлено: Чт дек 31, 2009 11:16 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт мар 01, 2007 7:57 pm
Сообщения: 834
http://fonts.ru/public/
Кому-то не хватало шрифтов с открытой лицензией, вот, они уже есть :)

_________________
Всех выше те, кто доброе творят,
И за дела добра не ждут наград,
Всем жертвуют для страждущих людей,
Не думая о выгоде своей.


Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт июл 23, 2010 4:02 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 750
Написал простенький просмотрщик шрифтов PSF.


Вложения:
screens.zip [32.19 КБ]
102 скачивания
psfview-0.1.zip [27.71 КБ]
97 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт авг 05, 2011 3:01 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
Есть задумка сделать системные шрифты векторными, но НЕмасштабируемыми.

Концепция такая:

1) символ - это набор линий в поле размером не более 31х63 пикселей.

2) линия - это связная цепочка пикселей, вдоль которой осуществляется рисование
Кодирование цепочки - трехбитовыми полями:
Код:
6 5 4 
7 • 0
3 2 1
- 2а) Конец рисования линии кодируется возвратом в предпоследнюю точку (NB: сумма двух любых противоположных направлений дает 7).

3) одинаковые (с точностью до сдвига по X и Y) линии могут быть общими у одного или нескольких разных символов
Код:
примеры:
-  = (вертикальный сдвиг)
b d p q (сдвиг вертикальной линии относительно кольца - всего две линии определяют 6 разных символов)

4) некоторые специальные символы (пробел, отдельная точка, псевдографика с кодами #176, #177 и др.), не попадающие в общую классификацию (см.1-3), требуют специальных (вариант: растровых) методов отображения.

Линия всегда связна, может пересекать саму себя (точка пересечения при этом будет отрисована дважды :( ), но не может разворачиваться назад (см. 2а)

Ожидается значительное ускорение вывода текста по сравнению как с растровыми, так и с масштабируемыми векторными шрифтами. То, что шрифты при этом получатся гораздо более компактными - очевидно.


Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт авг 05, 2011 3:22 pm 
Не в сети

Зарегистрирован: Чт ноя 25, 2010 8:26 pm
Сообщения: 41
art_zh
А зачем? Sorcerer уже имеет алгоритм растеризации векторных шрифтов, вопрос в другом, кто добавит поддержку масштабируемых шрифтов в Tinipad, например?
Про ускорение вывода не совсем очевидно. Если растр генерировать только однажды, а потом выводить только его, то разницы в скорости почти не будет. При ином алгоритме может быть, но сильно зависит от ситуации, мне кажется.


Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт авг 05, 2011 3:33 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
art_zh писал(а):
Есть задумка сделать системные шрифты векторными, но НЕмасштабируемыми.
Ожидается значительное ускорение вывода текста по сравнению как с растровыми, так и с масштабируемыми векторными шрифтами. То, что шрифты при этом получатся гораздо более компактными - очевидно.

Не понимаю, за счет чего будет ускорение вывода текста? Не уверен, что шрифты выйдут более компактными, чем растровые.

Foldl писал(а):
art_zh
А зачем? Sorcerer уже имеет алгоритм растеризации векторных шрифтов, вопрос в другом, кто добавит поддержку масштабируемых шрифтов в Tinipad, например?

Алгоритм - одно, реализация - другое. Даже если алгоритм простой, не использует дробных чисел, и операций деления всего пару. У меня есть наработки библиотеки на Си, а добрый Asper переводит все это на кошерный ассемблер, хотя дел у него (наверняка) очень много. Всем, конечно, хочется поскорее :) Сделать поддержку библиотеки в программах можно очень и очень просто: к примеру, в файле "fonts.ini" хранится информация о системном шрифте по умолчанию, а в библиотеке сделать аналог 4й системной функции, и вызывать ее из кода программ вместо int 0x40.


Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт авг 05, 2011 3:37 pm 
art_zh
Ты уж извини, но фигня какая-то. Напоминает ту картинку где из буханки хлеба сделали троллейбус.
Если уж делать векторные, то полностью векторные. В противном случае растровые замечательно в PNG упаковываются, а распаковщиков у нас как минимум две реализации уже есть.


Вернуться к началу
   
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт авг 05, 2011 3:47 pm 
Не в сети

Зарегистрирован: Чт ноя 25, 2010 8:26 pm
Сообщения: 41
Sorcerer писал(а):
Сделать поддержку библиотеки в программах можно очень и очень просто: к примеру, в файле "fonts.ini" хранится информация о системном шрифте по умолчанию, а в библиотеке сделать аналог 4й системной функции, и вызывать ее из кода программ вместо int 0x40.

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

Если я ошибаюсь, то как мне увеличить размер шрифта?


Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт авг 05, 2011 4:12 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
Ух ты, как все оживились-то :)
Foldl писал(а):
А зачем? Sorcerer уже имеет алгоритм растеризации векторных шрифтов,

Здесь фишка в другом: рисовать векторные шрифты не в растровой, а в векторной форме: "пиксель вверх, потом вниз и вправо, еще вправо, стоп".
Foldl писал(а):
вопрос в другом, кто добавит поддержку масштабируемых шрифтов в Tinipad, например?
Кому надо, тот и добавит.
Мне надо.
Foldl писал(а):
Про ускорение вывода не совсем очевидно. Если растр генерировать только однажды, а потом выводить только его, то разницы в скорости почти не будет. При ином алгоритме может быть, но сильно зависит от ситуации, мне кажется.
При выводе растра в каждом символе 8x16 (включая пробел!) рисуются 128 пикселей. Правда, в битмапе они выводятся группами по 4 пикселя, но это незначительное ускорение.
А скольно реальных пикселей в символе? В среднем - 15-20...
Foldl писал(а):
Если бы такое было возможно, то сделали бы иначе -- заменяли бы системный шрифт на тот, который нравится (например, значительно крупнее). Но если программы расчитывают, что буквы системой выводятся всегда определенного размера (4 пиксела, да?), то всё попадает.

Если я ошибаюсь, то как мне увеличить размер шрифта?

Не ошибаешься - надо править код.
Но не обязательно сразу и во всех программах. Системные фонты 0 и 1 никто отменять не собирается, но почему бы не ввести подгружаемые шрифты №3, 4, ... и не переделать для начала только один Tinypad под сменный шрифт?


Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт авг 05, 2011 4:50 pm 
art_zh писал(а):
Системные фонты 0 и 1 никто отменять не собирается, но почему бы не ввести подгружаемые шрифты №3, 4, ... и не переделать для начала только один Tinypad под сменный шрифт?

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


Вернуться к началу
   
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт авг 05, 2011 7:04 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
art_zh писал(а):
Ух ты, как все оживились-то :)
Foldl писал(а):
А зачем? Sorcerer уже имеет алгоритм растеризации векторных шрифтов,

Здесь фишка в другом: рисовать векторные шрифты не в растровой, а в векторной форме: "пиксель вверх, потом вниз и вправо, еще вправо, стоп".
Foldl писал(а):
вопрос в другом, кто добавит поддержку масштабируемых шрифтов в Tinipad, например?
Кому надо, тот и добавит.
Мне надо.
Foldl писал(а):
Про ускорение вывода не совсем очевидно. Если растр генерировать только однажды, а потом выводить только его, то разницы в скорости почти не будет. При ином алгоритме может быть, но сильно зависит от ситуации, мне кажется.
При выводе растра в каждом символе 8x16 (включая пробел!) рисуются 128 пикселей. Правда, в битмапе они выводятся группами по 4 пикселя, но это незначительное ускорение.
А скольно реальных пикселей в символе? В среднем - 15-20...

Ну и ну. Глиф для буквы "б" в размере 8x16. Тут куча кривых Безье, если делить на отрезки, то не менее 10 отрезков. Какая разница, рисовать 10 отрезков (или даже всего 20 точек) по координатам из таблицы, или 128 точек группами по 4?
А если 31х63 - так это вообще безумие, толщина линий в глифах как задаваться будет? Или шрифт будет неэстетично выглядеть, или выигрыша в скорости не будет, мне кажется.


Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт авг 05, 2011 7:44 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
Sourcerer
Буква "б" - это 2 глифа. Верхняя закорючка - 6 пикселей (4 байта), колечко - еще 15 (8 байт). Но это колечко - общий глиф для 7 или 8 символов, так что суди сам о плотности упаковки...


Вернуться к началу
 Заголовок сообщения: Re: Масштабируемые шрифты
СообщениеДобавлено: Пт авг 05, 2011 8:06 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Увы, это только для части пиксельных шрифтов так.В реальности каждая буква иногда очень сильно отличается от своих родственников. Насчет скорости-хочу непредвзятый тест производительности.И еще проблема-кто шрифты рисовать-то будет?Тяжелое и неблагодарное занятие.
Совершенно не против затеи, но высказываю опасения.

кстати,к вопросу о букве б.Предлагаю тем же tahoma размера 16-20 (это гораздо меньше 63 пкс в высоту) набрать рядом буквы б и о. Разницу видно невооруженным глазом.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 118 сообщений ]  На страницу Пред. 14 5 6 7 8 След.

Часовой пояс: UTC+03:00


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB