Всех с 2011 годом! Сейчас я вывожу символы в графическом режиме в виде рисования по маске. Вот скажем у меня есть символ 1 в 8x8: Потом я по двойному циклу проверяю какие биты включены и те точки и рисую. Это очень простой способ. А вот как быть, если требуется учитывать размер шрифта и выводить в строке символы разного размера. Как это делается? Можно конечно заранее заготовить шрифт с разной высотой и шириной, вплоть до 80x120. Но разве так делается? Как вообще делается вывод символов разных размеров?
А кто-нибудь из Вас уже делал в своей операционной системе векторный шрифт? Мне просто интересен сам пример одной буквы. Как можно записать векторами так, чтобы потом произвести масштабирование в любой размер. И ещё, кто-нибудь делал так, чтобы символы имели не одинаковую длину, а именно заточенные под длину буквы (например I и W разного размера)? И что касается гарнитуры. По сути это нужно делать отдельные шрифты, например, fontN, fontI, fontB и так далее...?
Живой пример хочется, если кому-то не трудно. Как вот можно представить в виде вектором такой вот символ и как его потом масштабировать в любой размер: Если кто не понял, то это буква M.
Представь букву состоящую из отрезков (ломаная линия). Получилось? Вот теперь, что бы её нарисовать тебе нужно знать 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*ШИРИНА Включи воображение. Удачи!
S_Alex Спасибо! Я как-то так и думал. У меня идея есть где будет массив масок (это и есть наш шрифт в виде базовой структуры) и функция, которая рисует символ. На входе она получает: 1. X координату куда вывести символ 2. Y координату куда вывести символ 3. Номер символа (0-255) 4. Высоту символа (честно, про ширину не думал, думал только про моноширотные и пропорциональные) 5. Степень наклона (минусовые значения для наклона в другую сторону) 6. Толщину линий (не false/true, а числовое значение) 7. Подчёркивание/зачёркивание Больше пока не придумал. Идея хорошая?
s3dworld есть же готовые редакторы для ттф и а1 и еще каких шрифтов. есть готовые шрифты для рендеринга в картинки нужного размера есть либы разные. фритайп, например. можно также рисовать картинки буков и трассировать их в вектора можно также использовать свг как формат. редакторы и опенсорсные либы-рендереры тоже есть. можно и самому написать, если сильно охота. просто, если выписывать самому каждую мелочь, то ось свою вы никогда не закончите
Про масштабирование можно также прочитать у Владимира Кулакова -- "Программирование на аппаратном уровне".
qqwe Осталось всего лишь пересобрать фретайп так, чтобы он работал в его системе (написать свои процедуры выделения памяти, чтения и т.д.). Потом разобраться с самим фреетайп. Плёвое дело! ЗЫ А я знаю, зачем вы это ему советуете... чтобы не видеть его тут пару месяцев Хотя не могу признать, что ты прав. Фритайп рулит....
Z3N ну фритайп1 проще чем фритайп2 что за ось без работы с кучей? как он сможет работать с шрифтами без доступа к ним? можно использовать не официальный фритайп, а уже переделанный для притирания к какому нить питону. ну графика то у него должна быть уже. без нее он как буквы рисовать будет? а что такое пару месяцев, если пишешь свою ОСь? кроме того, умение пользоваться готовыми либами ценнее этих пары месяцев. Voodoo боле-мене стандартная либС решит сразу много проблем кроме того, надо ж реализовать не все функции, а только необходимые. кучу, там, файлы. сорцы либС идут даже в поставке мсвс. в сорцах ов есть сорцы либС для доса. те, не надо все писать с 0. достаточно подредактировать уже имеющееся
qqwe У меня большие по этому поводу сомнения были и остаются , мне кажется, что он говорил про текстовый режим. А установить нормальный графический режим не каждому дано, у калибри это долго не получалось, а может и не получилось до сих пор - давно не загружал. Были там проблемы с развёрсткой... для ЛСД это не проблема, а вот для трубок - очень большая. Ну, этот чувак, слава богу, пишет не BolgenOS. Хотя заморочиться с фритайп было бы полезно. Да, и либс тоже потом пригодилась бы. Если ему, конечно, времени не жалко....