Создание шрифта для своей ОС

Тема в разделе "WASM.BEGINNERS", создана пользователем s3dworld, 1 янв 2011.

  1. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Всех с 2011 годом!

    Сейчас я вывожу символы в графическом режиме в виде рисования по маске. Вот скажем у меня есть символ 1 в 8x8:

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

    А вот как быть, если требуется учитывать размер шрифта и выводить в строке символы разного размера. Как это делается?

    Можно конечно заранее заготовить шрифт с разной высотой и шириной, вплоть до 80x120. Но разве так делается? Как вообще делается вывод символов разных размеров?
     
  2. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Масштабированием например
     
  3. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    punxer
    И на сколько это удачная затея и как вообще делается?
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    s3dworld
    Масштабированием и делается. Только шрифты векторные.
     
  5. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Pavia
    Можно простой пример?
     
  6. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    s3dworld
    freetype
     
  7. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    А кто-нибудь из Вас уже делал в своей операционной системе векторный шрифт?

    Мне просто интересен сам пример одной буквы. Как можно записать векторами так, чтобы потом произвести масштабирование в любой размер.

    И ещё, кто-нибудь делал так, чтобы символы имели не одинаковую длину, а именно заточенные под длину буквы (например I и W разного размера)?

    И что касается гарнитуры. По сути это нужно делать отдельные шрифты, например, fontN, fontI, fontB и так далее...?
     
  8. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Живой пример хочется, если кому-то не трудно. Как вот можно представить в виде вектором такой вот символ и как его потом масштабировать в любой размер:

    Если кто не понял, то это буква M.
     
  9. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Представь букву состоящую из отрезков (ломаная линия).
    Получилось?

    Вот теперь, что бы её нарисовать тебе нужно знать 5 точек.
    1. 8,8
    2. 1,8
    3. 5,4
    4. 1,1
    5. 8,1

    Соединишь их прямой и получишь свою буковку.

    А если тебе нужен масштаб. То представь, что у тебя есть две переменые: высота и ширина символа (для курсива еще и угол наклона можно ввести).
    Ну как? Кактинка стабильна?
    А все остальные особые точки символа должны быть представлены в виде коэффициетов стоящих при ВЫСОТЕ и ШИРИНЕ.

    И того получаем:

    1. 8*ВЫСОТА,8*ШИРИНА
    2. 1*ВЫСОТА,8*ШИРИНА
    3. 5*ВЫСОТА,4*ШИРИНА
    4. 1*ВЫСОТА,1*ШИРИНА
    5. 8*ВЫСОТА,1*ШИРИНА

    Включи воображение.
    Удачи!
     
  10. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    S_Alex
    Спасибо! Я как-то так и думал. У меня идея есть где будет массив масок (это и есть наш шрифт в виде базовой структуры) и функция, которая рисует символ. На входе она получает:

    1. X координату куда вывести символ
    2. Y координату куда вывести символ
    3. Номер символа (0-255)
    4. Высоту символа (честно, про ширину не думал, думал только про моноширотные и пропорциональные)
    5. Степень наклона (минусовые значения для наклона в другую сторону)
    6. Толщину линий (не false/true, а числовое значение)
    7. Подчёркивание/зачёркивание

    Больше пока не придумал. Идея хорошая?
     
  11. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    s3dworld
    есть же готовые редакторы для ттф и а1 и еще каких шрифтов. есть готовые шрифты
    для рендеринга в картинки нужного размера есть либы разные. фритайп, например.

    можно также рисовать картинки буков и трассировать их в вектора

    можно также использовать свг как формат. редакторы и опенсорсные либы-рендереры тоже есть.

    можно и самому написать, если сильно охота. просто, если выписывать самому каждую мелочь, то ось свою вы никогда не закончите
     
  12. bendme

    bendme New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    Да все ща сидят и делают вектарный шрифт к своей операционной системе, работающей с дискеты.
     
  13. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Про масштабирование можно также прочитать у Владимира Кулакова -- "Программирование на аппаратном уровне".
     
  14. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    qqwe
    Осталось всего лишь пересобрать фретайп так, чтобы он работал в его системе (написать свои процедуры выделения памяти, чтения и т.д.). Потом разобраться с самим фреетайп. Плёвое дело!
    ЗЫ
    А я знаю, зачем вы это ему советуете... чтобы не видеть его тут пару месяцев ;););)

    Хотя не могу признать, что ты прав. Фритайп рулит....
     
  15. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    так что, нужно лишь сделать свою standards-compliant libc и совместимый рендерер шрифтов.
     
  16. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Z3N
    ну фритайп1 проще чем фритайп2
    что за ось без работы с кучей?
    как он сможет работать с шрифтами без доступа к ним?
    можно использовать не официальный фритайп, а уже переделанный для притирания к какому нить питону.
    ну графика то у него должна быть уже. без нее он как буквы рисовать будет?

    а что такое пару месяцев, если пишешь свою ОСь?
    кроме того, умение пользоваться готовыми либами ценнее этих пары месяцев.

    Voodoo
    боле-мене стандартная либС решит сразу много проблем
    кроме того, надо ж реализовать не все функции, а только необходимые. кучу, там, файлы.
    сорцы либС идут даже в поставке мсвс. в сорцах ов есть сорцы либС для доса. те, не надо все писать с 0. достаточно подредактировать уже имеющееся
     
  17. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    qqwe
    У меня большие по этому поводу сомнения были и остаются , мне кажется, что он говорил про текстовый режим. А установить нормальный графический режим не каждому дано, у калибри это долго не получалось, а может и не получилось до сих пор - давно не загружал. Были там проблемы с развёрсткой... для ЛСД это не проблема, а вот для трубок - очень большая.

    Ну, этот чувак, слава богу, пишет не BolgenOS. :)
    Хотя заморочиться с фритайп было бы полезно. Да, и либс тоже потом пригодилась бы. Если ему, конечно, времени не жалко....