Алгоритм вывода TTF шрифтов ?
Moderator: Shaos
-
- Doomed
- Posts: 413
- Joined: 11 Dec 2003 14:34
Алгоритм вывода TTF шрифтов ?
Привет!
После того, как получено векторное представление шрифта (форма символа), как дальше оно выводится на экран моника - в виде картинки знакоместа (скажем bmp-формата) или векторным движком соотв. в векторной картинке ?
После того, как получено векторное представление шрифта (форма символа), как дальше оно выводится на экран моника - в виде картинки знакоместа (скажем bmp-формата) или векторным движком соотв. в векторной картинке ?
Vasil Ivanov
vasil-i@yandex.ru
vasil-i@yandex.ru
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
Давным-давно экпериментировал с графикой посредством BGI от
Borland. Делал что-то вроде текстового редактора/просмотровщика.
Конечно все было не очень быстро - но довольно прилично.
Дак вот - во время прорисовки символов, если нажать "pause"
скорость вывода тормозилось раз в 100, и можно было видеть как
прорисовывается каждая буква - как будто рисуется карандашом.
Borland. Делал что-то вроде текстового редактора/просмотровщика.
Конечно все было не очень быстро - но довольно прилично.
Дак вот - во время прорисовки символов, если нажать "pause"
скорость вывода тормозилось раз в 100, и можно было видеть как
прорисовывается каждая буква - как будто рисуется карандашом.
-
- Retired
- Posts: 587
- Joined: 27 Mar 2013 04:55
- Location: 62.192.229.16
Я то же писал, но по другому.
Каждый отрезок/кривая в символе, превращается в выражение x=ay+b и ограничение y>=y0 && y<=y1.
Дальше, для каждой строки находим все решения уравнений. То есть находим координаты точки пересечения прямой/кривой и горизонтали. На входе y, на выходе x.
Точнее получаем массив чисел, который упорядочиваем. Потом рисуем линию от первой до второй точки, от третьей до четвертой и т.д.
Если число получилось дробное, то можно ставить не белую, а серую точку. Чуть-чуть повышается качество.
Каждый отрезок/кривая в символе, превращается в выражение x=ay+b и ограничение y>=y0 && y<=y1.
Дальше, для каждой строки находим все решения уравнений. То есть находим координаты точки пересечения прямой/кривой и горизонтали. На входе y, на выходе x.
Точнее получаем массив чисел, который упорядочиваем. Потом рисуем линию от первой до второй точки, от третьей до четвертой и т.д.
Если число получилось дробное, то можно ставить не белую, а серую точку. Чуть-чуть повышается качество.
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Когда я пересел со "Специалиста" на русскую ИБМ-ПыСи "Искра-1030", то очень хотелось
чтобы в ней эмуль "Специалиста" был... но разрешение экрана этого не позволяло (ХХХ х 200).
Тогда я решил, что в текстровых строках "Специалист" поместить всё же можно, если применить
масштабируемые векторные шрифты.
Ну и поскольку окромя Васика 4.5 у меня не было никакого софта, то я написал такие шрифты
через его оператор DRAW.
Текстовую эмляцию"Специалиста" я не закончил тогда... а вот сами шрифты очень пригодились
позже...
Потому как мои символы можно было вывести в любую точку экрана, а вот родные шрифты
"ИБМ-ПыСи" - позиционировались по знакоместам даже в графических режимах.
Если найду картинку и исходник - сейчас выложу здесь...
Значит - это кусок алгоритма создания шрифта:
Для скорости ASCII-таблица делилась на строки, для каждой строки - своя такая подпрограмма.
А это, собственно - вывод их на экран:

чтобы в ней эмуль "Специалиста" был... но разрешение экрана этого не позволяло (ХХХ х 200).
Тогда я решил, что в текстровых строках "Специалист" поместить всё же можно, если применить
масштабируемые векторные шрифты.
Ну и поскольку окромя Васика 4.5 у меня не было никакого софта, то я написал такие шрифты
через его оператор DRAW.
Текстовую эмляцию"Специалиста" я не закончил тогда... а вот сами шрифты очень пригодились
позже...
Потому как мои символы можно было вывести в любую точку экрана, а вот родные шрифты
"ИБМ-ПыСи" - позиционировались по знакоместам даже в графических режимах.
Если найду картинку и исходник - сейчас выложу здесь...
Значит - это кусок алгоритма создания шрифта:
Code: Select all
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
А это, собственно - вывод их на экран:

iLavr
-
- Doomed
- Posts: 413
- Joined: 11 Dec 2003 14:34
Если только кэшировать сразу весь алфавит. Когда появилась Винда, а с ней и ttf-шрифты - тогда железо было не шибко навороченное, но в то же время, шрифты выводились в приличной скоростью при выводе страницы текста.Shaos wrote:ну движок по видимому должен растеризировать векторный фонт, кешируя буквы, чтобы одно и тоже не перерастеризировать по многу раз - см. freetype
Vasil Ivanov
vasil-i@yandex.ru
vasil-i@yandex.ru
-
- Doomed
- Posts: 413
- Joined: 11 Dec 2003 14:34
Думаю это был просто построчный вывод пикселей символа(ов). Скажем как прорисовка символов в текстовом режиме экрана.aav8 wrote:Давным-давно экпериментировал с графикой посредством BGI от
Borland. Делал что-то вроде текстового редактора/просмотровщика.
Конечно все было не очень быстро - но довольно прилично.
Дак вот - во время прорисовки символов, если нажать "pause"
скорость вывода тормозилось раз в 100, и можно было видеть как
прорисовывается каждая буква - как будто рисуется карандашом.
Vasil Ivanov
vasil-i@yandex.ru
vasil-i@yandex.ru
-
- Doomed
- Posts: 413
- Joined: 11 Dec 2003 14:34
А вывод символов из bmp-картинки (массив символов) не быстрее будет ?Lavr wrote:Когда я пересел со "Специалиста" на русскую ИБМ-ПыСи "Искра-1030", то очень хотелось
чтобы в ней эмуль "Специалиста" был... но разрешение экрана этого не позволяло (ХХХ х 200).
Тогда я решил, что в текстровых строках "Специалист" поместить всё же можно, если применить
масштабируемые векторные шрифты.
Ну и поскольку окромя Васика 4.5 у меня не было никакого софта, то я написал такие шрифты
через его оператор DRAW.
Текстовую эмляцию"Специалиста" я не закончил тогда... а вот сами шрифты очень пригодились
позже...
Потому как мои символы можно было вывести в любую точку экрана, а вот родные шрифты
"ИБМ-ПыСи" - позиционировались по знакоместам даже в графических режимах.
Если найду картинку и исходник - сейчас выложу здесь...
Значит - это кусок алгоритма создания шрифта:Для скорости ASCII-таблица делилась на строки, для каждой строки - своя такая подпрограмма.Code: Select all
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
А это, собственно - вывод их на экран:
Vasil Ivanov
vasil-i@yandex.ru
vasil-i@yandex.ru
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Шрифт может оказаться больше одного алфавита (unicode однако), поэтому растеризовать надо только те буквы, что реально выводятся, причём в том размере, который реальной нужен.Vasil Ivanov wrote:Если только кэшировать сразу весь алфавит. Когда появилась Винда, а с ней и ttf-шрифты - тогда железо было не шибко навороченное, но в то же время, шрифты выводились в приличной скоростью при выводе страницы текста.Shaos wrote:ну движок по видимому должен растеризировать векторный фонт, кешируя буквы, чтобы одно и тоже не перерастеризировать по многу раз - см. freetype
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
А проверь!Vasil Ivanov wrote:А вывод символов из bmp-картинки (массив символов) не быстрее будет ?

А символы из bmp-картинки разве будут масштабируемыми и векторными?
PS. Собственно, на ХТ - "Искре-1030" с её 4.77 Мгц я видимых тормозов с этими шрифтами не замечал,
там, где я их использовал. А что было бы при эмуляции "Специалиста" - сказать трудно.
iLavr
-
- Doomed
- Posts: 413
- Joined: 11 Dec 2003 14:34
Речь уже пошла об оптимизации работы со шрифтами, а сабж о другом.Shaos wrote:Шрифт может оказаться больше одного алфавита (unicode однако), поэтому растеризовать надо только те буквы, что реально выводятся, причём в том размере, который реальной нужен.Vasil Ivanov wrote:Если только кэшировать сразу весь алфавит. Когда появилась Винда, а с ней и ttf-шрифты - тогда железо было не шибко навороченное, но в то же время, шрифты выводились в приличной скоростью при выводе страницы текста.Shaos wrote:ну движок по видимому должен растеризировать векторный фонт, кешируя буквы, чтобы одно и тоже не перерастеризировать по многу раз - см. freetype
Vasil Ivanov
vasil-i@yandex.ru
vasil-i@yandex.ru
-
- Doomed
- Posts: 413
- Joined: 11 Dec 2003 14:34
По первому вопросу - я сейчас занимаюсь несколько другим. И для проверки вывода bmp-шрифтов нужен подопытный комп, чего у меня пока нет.Lavr wrote:А проверь!Vasil Ivanov wrote:А вывод символов из bmp-картинки (массив символов) не быстрее будет ?У меня такой необходимости не было, поэтому и не могу дать ответ...
А символы из bmp-картинки разве будут масштабируемыми и векторными?
PS. Собственно, на ХТ - "Искре-1030" с её 4.77 Мгц я видимых тормозов с этими шрифтами не замечал,
там, где я их использовал. А что было бы при эмуляции "Специалиста" - сказать трудно.
По второму вопросу ты и сам знаешь ответ - нет и нет.
Vasil Ivanov
vasil-i@yandex.ru
vasil-i@yandex.ru
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия