nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 01:39



Reply to topic  [ 13 posts ] 
Алгоритм вывода TTF шрифтов ? 
Author Message
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Привет!
После того, как получено векторное представление шрифта (форма символа), как дальше оно выводится на экран моника - в виде картинки знакоместа (скажем bmp-формата) или векторным движком соотв. в векторной картинке ?

_________________
Vasil Ivanov
vasil-i@yandex.ru


18 Oct 2013 06:52
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
ну движок по видимому должен растеризировать векторный фонт, кешируя буквы, чтобы одно и тоже не перерастеризировать по многу раз - см. freetype

_________________
:dj: https://mastodon.social/@Shaos


18 Oct 2013 09:04
Profile WWW
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Давным-давно экпериментировал с графикой посредством BGI от
Borland. Делал что-то вроде текстового редактора/просмотровщика.
Конечно все было не очень быстро - но довольно прилично.
Дак вот - во время прорисовки символов, если нажать "pause"
скорость вывода тормозилось раз в 100, и можно было видеть как
прорисовывается каждая буква - как будто рисуется карандашом.


18 Oct 2013 20:50
Profile
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Post 
Я то же писал, но по другому.

Каждый отрезок/кривая в символе, превращается в выражение x=ay+b и ограничение y>=y0 && y<=y1.

Дальше, для каждой строки находим все решения уравнений. То есть находим координаты точки пересечения прямой/кривой и горизонтали. На входе y, на выходе x.

Точнее получаем массив чисел, который упорядочиваем. Потом рисуем линию от первой до второй точки, от третьей до четвертой и т.д.

Если число получилось дробное, то можно ставить не белую, а серую точку. Чуть-чуть повышается качество.


19 Oct 2013 01:25
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Когда я пересел со "Специалиста" на русскую ИБМ-ПыСи "Искра-1030", то очень хотелось
чтобы в ней эмуль "Специалиста" был... но разрешение экрана этого не позволяло (ХХХ х 200).

Тогда я решил, что в текстровых строках "Специалист" поместить всё же можно, если применить
масштабируемые векторные шрифты.

Ну и поскольку окромя Васика 4.5 у меня не было никакого софта, то я написал такие шрифты
через его оператор DRAW.

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

Если найду картинку и исходник - сейчас выложу здесь...

Значит - это кусок алгоритма создания шрифта:
Code:
SELECT CASE Mes$
CASE "@"
'@
  DRAW "BR3 C15 L2 H U2 E R2 F D L2 U BD3 BR4"
CASE "A"
'A
'  DRAW "C15 U2 E2 F2 D NL3 D BR2"
   DRAW "C15 U E3 R D3 NL4 D BR2"
CASE "B"
'B
  DRAW "C15 U4 R3 F G NL2 F G L2 BR5"
CASE "C"
'C
  DRAW "BR C15 R2 E BU2 H L2 G D2 BD BR6"
CASE "D"
'D
  DRAW "C15 R3 E U2 H L2 NL D4 BR5"
CASE "E"
'E
  DRAW "C15 NR4 U2 NR3 U2 R4 BD4 BR2"
CASE "F"
'F
  DRAW "C15 U2 NR3 U2 R4 BD4 BR2"
CASE "G"
'G
  DRAW "BR C15 R3 U NL BU2 H L2 G D2 BD BR6"
CASE "H"
'H
  DRAW "C15 U4 BR4 D2 NL3 D2 BR2"
CASE "I"
'I
  DRAW "BR C15 R NR U4 L R2 BD4 BR3"
CASE "J"
'J
  DRAW "BU C15 F R E U3 L R2 BD4 BR2"
CASE "K"
'K
  DRAW "C15 U4 BR4 G2 NL2 F2 BR2"
CASE "L"
'L
  DRAW "C15 R U4 L R2 BD4 R2 U1 BD BR2"
CASE "M"
'M
  DRAW "C15 U4 F2 E2 D4 BR2"
CASE "N"
'N
  DRAW "C15 U4 F4 U4 BD4 BR2"
CASE "O"
'O
  DRAW "BR C15 R2 E U2 H L2 G D2 BD BR6"
END SELECT

Для скорости ASCII-таблица делилась на строки, для каждой строки - своя такая подпрограмма.

А это, собственно - вывод их на экран:

Image

_________________
iLavr


19 Oct 2013 05:45
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Post 
Shaos wrote:
ну движок по видимому должен растеризировать векторный фонт, кешируя буквы, чтобы одно и тоже не перерастеризировать по многу раз - см. freetype


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

_________________
Vasil Ivanov
vasil-i@yandex.ru


20 Oct 2013 12:22
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Post 
aav8 wrote:
Давным-давно экпериментировал с графикой посредством BGI от
Borland. Делал что-то вроде текстового редактора/просмотровщика.
Конечно все было не очень быстро - но довольно прилично.
Дак вот - во время прорисовки символов, если нажать "pause"
скорость вывода тормозилось раз в 100, и можно было видеть как
прорисовывается каждая буква - как будто рисуется карандашом.


Думаю это был просто построчный вывод пикселей символа(ов). Скажем как прорисовка символов в текстовом режиме экрана.

_________________
Vasil Ivanov
vasil-i@yandex.ru


20 Oct 2013 12:27
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Post 
Lavr wrote:
Когда я пересел со "Специалиста" на русскую ИБМ-ПыСи "Искра-1030", то очень хотелось
чтобы в ней эмуль "Специалиста" был... но разрешение экрана этого не позволяло (ХХХ х 200).

Тогда я решил, что в текстровых строках "Специалист" поместить всё же можно, если применить
масштабируемые векторные шрифты.

Ну и поскольку окромя Васика 4.5 у меня не было никакого софта, то я написал такие шрифты
через его оператор DRAW.

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

Если найду картинку и исходник - сейчас выложу здесь...

Значит - это кусок алгоритма создания шрифта:
Code:
SELECT CASE Mes$
CASE "@"
'@
  DRAW "BR3 C15 L2 H U2 E R2 F D L2 U BD3 BR4"
CASE "A"
'A
'  DRAW "C15 U2 E2 F2 D NL3 D BR2"
   DRAW "C15 U E3 R D3 NL4 D BR2"
CASE "B"
'B
  DRAW "C15 U4 R3 F G NL2 F G L2 BR5"
CASE "C"
'C
  DRAW "BR C15 R2 E BU2 H L2 G D2 BD BR6"
CASE "D"
'D
  DRAW "C15 R3 E U2 H L2 NL D4 BR5"
CASE "E"
'E
  DRAW "C15 NR4 U2 NR3 U2 R4 BD4 BR2"
CASE "F"
'F
  DRAW "C15 U2 NR3 U2 R4 BD4 BR2"
CASE "G"
'G
  DRAW "BR C15 R3 U NL BU2 H L2 G D2 BD BR6"
CASE "H"
'H
  DRAW "C15 U4 BR4 D2 NL3 D2 BR2"
CASE "I"
'I
  DRAW "BR C15 R NR U4 L R2 BD4 BR3"
CASE "J"
'J
  DRAW "BU C15 F R E U3 L R2 BD4 BR2"
CASE "K"
'K
  DRAW "C15 U4 BR4 G2 NL2 F2 BR2"
CASE "L"
'L
  DRAW "C15 R U4 L R2 BD4 R2 U1 BD BR2"
CASE "M"
'M
  DRAW "C15 U4 F2 E2 D4 BR2"
CASE "N"
'N
  DRAW "C15 U4 F4 U4 BD4 BR2"
CASE "O"
'O
  DRAW "BR C15 R2 E U2 H L2 G D2 BD BR6"
END SELECT

Для скорости ASCII-таблица делилась на строки, для каждой строки - своя такая подпрограмма.

А это, собственно - вывод их на экран:

Image


А вывод символов из bmp-картинки (массив символов) не быстрее будет ?

_________________
Vasil Ivanov
vasil-i@yandex.ru


20 Oct 2013 12:31
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Vasil Ivanov wrote:
Shaos wrote:
ну движок по видимому должен растеризировать векторный фонт, кешируя буквы, чтобы одно и тоже не перерастеризировать по многу раз - см. freetype


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


Шрифт может оказаться больше одного алфавита (unicode однако), поэтому растеризовать надо только те буквы, что реально выводятся, причём в том размере, который реальной нужен.

_________________
:dj: https://mastodon.social/@Shaos


20 Oct 2013 14:25
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Vasil Ivanov wrote:
А вывод символов из bmp-картинки (массив символов) не быстрее будет ?

А проверь! :lol: У меня такой необходимости не было, поэтому и не могу дать ответ...

А символы из bmp-картинки разве будут масштабируемыми и векторными?


PS. Собственно, на ХТ - "Искре-1030" с её 4.77 Мгц я видимых тормозов с этими шрифтами не замечал,
там, где я их использовал. А что было бы при эмуляции "Специалиста" - сказать трудно.

_________________
iLavr


20 Oct 2013 16:51
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Post 
Shaos wrote:
Vasil Ivanov wrote:
Shaos wrote:
ну движок по видимому должен растеризировать векторный фонт, кешируя буквы, чтобы одно и тоже не перерастеризировать по многу раз - см. freetype


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


Шрифт может оказаться больше одного алфавита (unicode однако), поэтому растеризовать надо только те буквы, что реально выводятся, причём в том размере, который реальной нужен.


Речь уже пошла об оптимизации работы со шрифтами, а сабж о другом.

_________________
Vasil Ivanov
vasil-i@yandex.ru


22 Oct 2013 01:33
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Post 
Lavr wrote:
Vasil Ivanov wrote:
А вывод символов из bmp-картинки (массив символов) не быстрее будет ?

А проверь! :lol: У меня такой необходимости не было, поэтому и не могу дать ответ...

А символы из bmp-картинки разве будут масштабируемыми и векторными?


PS. Собственно, на ХТ - "Искре-1030" с её 4.77 Мгц я видимых тормозов с этими шрифтами не замечал,
там, где я их использовал. А что было бы при эмуляции "Специалиста" - сказать трудно.


По первому вопросу - я сейчас занимаюсь несколько другим. И для проверки вывода bmp-шрифтов нужен подопытный комп, чего у меня пока нет.
По второму вопросу ты и сам знаешь ответ - нет и нет.

_________________
Vasil Ivanov
vasil-i@yandex.ru


22 Oct 2013 01:39
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Vasil Ivanov wrote:
По первому вопросу - я сейчас занимаюсь несколько другим.

Да вот и я тоже. Просто вспомнился этот артефакт в связи с векторными шрифтами...

_________________
iLavr


22 Oct 2013 10:35
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 13 posts ] 

Who is online

Users browsing this forum: No registered users and 21 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 Group
Designed by ST Software.