Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Sep 25, 2020 7:52 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 118 posts ]  Go to page Previous 14 5 6 7 8 Next
Author Message
PostPosted: Fri Aug 05, 2011 3:01 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1412
Есть задумка сделать системные шрифты векторными, но НЕмасштабируемыми.

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

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

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

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

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

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

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


Top
   
PostPosted: Fri Aug 05, 2011 3:22 pm 
Offline

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


Top
   
PostPosted: Fri Aug 05, 2011 3:33 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
art_zh wrote:
Есть задумка сделать системные шрифты векторными, но НЕмасштабируемыми.
Ожидается значительное ускорение вывода текста по сравнению как с растровыми, так и с масштабируемыми векторными шрифтами. То, что шрифты при этом получатся гораздо более компактными - очевидно.

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

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

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


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


Top
   
PostPosted: Fri Aug 05, 2011 3:47 pm 
Offline

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

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

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


Top
   
PostPosted: Fri Aug 05, 2011 4:12 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1412
Ух ты, как все оживились-то :)
Foldl wrote:
А зачем? Sorcerer уже имеет алгоритм растеризации векторных шрифтов,

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

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

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


Top
   
PostPosted: Fri Aug 05, 2011 4:50 pm 
art_zh wrote:
Системные фонты 0 и 1 никто отменять не собирается, но почему бы не ввести подгружаемые шрифты №3, 4, ... и не переделать для начала только один Tinypad под сменный шрифт?

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


Top
   
PostPosted: Fri Aug 05, 2011 7:04 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
art_zh wrote:
Ух ты, как все оживились-то :)
Foldl wrote:
А зачем? Sorcerer уже имеет алгоритм растеризации векторных шрифтов,

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

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


Top
   
PostPosted: Fri Aug 05, 2011 7:44 pm 
Offline
Kernel Developer
User avatar

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


Top
   
PostPosted: Fri Aug 05, 2011 8:06 pm 
Offline

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

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


Top
   
PostPosted: Fri Aug 05, 2011 9:23 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1412
Sorcerer wrote:
Увы, это только для части пиксельных шрифтов так.В реальности каждая буква иногда очень сильно отличается от своих родственников. ... кстати,к вопросу о букве б.Предлагаю тем же tahoma размера 16-20 (это гораздо меньше 63 пкс в высоту) набрать рядом буквы б и о. Разницу видно невооруженным глазом.
Да, согласен. В разных шрифтах - разные "родственники". Я сейчас вожусь с Курьером 9х16, там двойников больше и буквы тонкие - как раз то что надо. Размер 31х63 конечно абсурдно большой, я просто забил 6 бит на Y и 5 бит на Х, чтоб на все случаи жизни хватило. Мало ли что, может кто захочет себе крупный фонт 36х20 забабахать? Хотя на больших глифах конечно у безье-шрифтов будет преимущество в размере (но не в скорости отрисовки).
Sorcerer wrote:
Насчет скорости-хочу непредвзятый тест производительности.И еще проблема-кто шрифты рисовать-то будет?Тяжелое и неблагодарное занятие.
Будет шрифт - будет и тест (MGB устроит в качестве непредвзятого теста?) .
Работка действительно муторная (я пока только до цифры 3 дошел), но чем дальше в лес- тем чаще партизаны - тем больше общих линий.


Top
   
PostPosted: Fri Aug 05, 2011 9:45 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Наверное;) катит только твой вариант только для тонких шрифтов, а это не годится для шрифтов в браузерах, продвинутых редакторах. А вместо старых системных-идея хорошая. Вместо запатентованного шрифта может лучше использовать что-то свободное и похожее?


Top
   
PostPosted: Fri Aug 05, 2011 9:55 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1412
Сейчас хотя бы что-нибудь читаемое, а то глаза совсем сели.
А потом - посмотрим на результаты.


Top
   
PostPosted: Sat Aug 06, 2011 12:59 am 
Offline

Joined: Fri Feb 18, 2011 3:13 pm
Posts: 201
art_zh wrote:
Есть задумка сделать системные шрифты векторными, но НЕмасштабируемыми.


Идея не новая - в Apple II так кодировались спрайты чтобы быстро рисовать из Бейсика. Только назывались не спрайты, а как то по-другому (память уже не та...)
Разумно сделать кодировка 4-х битная. 3 бита на направление и 1 на действие - перемещение/рисование.
Кстати, эти изображения по существу векторные и их можно мащабировать.


Top
   
PostPosted: Sat Aug 06, 2011 12:51 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1412
johnfound
Масштабировать (х2, х3) конечно можно, но получится коряво - также как Zoom для маленьких растровых шрифтов.

Конечно идея стара как мир. Я помню более древние времена: в Turbo Pascal 3.0 была библиотека черепашьей графики, где трак тоже запоминался 4-битовыми цепочками.
И даже еще более древние: именно такой принцип кодировки был зашит в ROM (матрица с тысячами вручную впаяных диодов!) чуда советской электроники - векторно-растрового дисплея РИН-609.

Только всё-таки 3 битная кодировка линий на 25% короче. И даже такая упаковка оказывается избыточной: для плавных линий (без острых углов) можно обойтись и двумя битами на пиксель.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 118 posts ]  Go to page Previous 14 5 6 7 8 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited