PDA

Просмотр полной версии : Шрифты от Palm'а на Спектруме



CityAceE
29.07.2007, 17:16
В продолжении этой (http://zx.pk.ru/showthread.php?t=2305) темы...

Вот, разобрался, наконец, со структурой Палмовских шрифтов.

В аттаче исходник для вывода шрифта целиком, ну и сами шрифты... Программа написана тяп-ляп, лишь бы работала.

Хочется сделать возможным полноценное использование этих шрифтов на Спектруме.

CHRV
30.07.2007, 11:56
Вот, разобрался, наконец, со структурой Палмовских шрифтов.
:v2_devil: Где же наши любимые копирайтеры и поборники авторских прав...
Правильно Стас так их буржуев :).

Vitamin
30.07.2007, 12:34
Вопрос еще как их выводить эти шрифты... Мелкие как обычные пропорциональные можно. А вот насчет больших- чисто декоративная функция а-ля "напечатать надпись". ИМХО

CityAceE
30.07.2007, 12:49
Они пропорциональные не только по горизонтали, но и по вертикали. Это ключевой момент и их отличительная черта...

caro
30.07.2007, 12:58
Они пропорциональные не только по горизонтали, но и по вертикали. Это ключевой момент и их отличительная черта...Если под пропорциональностью по вертикали имеется ввиду возможность печати в одной строке текстов с разной высотой шрифта, то это скорее свойство процедуры печати, а не шрифтов, поскольку в каждом фонте все символы имеют одинаковую высоту.



Структура файла фонта для Пальма

typedef struct FontTag {
0 Int16 fontType; 9000h тип фонта
2 Int16 firstChar; 0003h 3 код первого символа
4 Int16 lastChar; 001Ah 26 код последнего символа
6 Int16 maxWidth; 000Bh 11 максимальная ширина в пикселях
8 Int16 kernMax; 0000h 0
10 Int16 nDescent; 0000h 0
12 Int16 fRectWidth; 000Bh 11 обычно равно макс.ширине
14 Int16 fRectHeight; 000Ah 10 высота в пикселях
16 Int16 owTLoc; 00A1h 161 смещение от тек.адреса до табл.ширин /2
18 Int16 ascent; 0009h 9 число пикселей от верхушки до базовой линии
20 Int16 descent; 0001h 1
22 Int16 leading; 0000h 0
24 Int16 rowWords; 000Dh - 13
} FontType;
26 - Дальше идет Height строк BitMap

16+(161*2)-(26-3)*2 - Затем таблица смещений символов в BitMap

16+(161*2) - Затем таблица ширины каждого символа


Надо иметь ввиду, что в файле слово записывается в формате: Старший, младший.

CityAceE
30.07.2007, 13:05
Имеется ввиду отсутствие привязки к знакоместам по вертикали. Высота шрифтов не обязательно кратна восьми, я бы даже сказал, что она вовсе не кратна восьми. Это откладывает отпечаток на формат хранения шрифтов, ну и, соответсвенно, на процедуру печати.

Vitamin
30.07.2007, 14:11
В целях оптимизации скорострельности вывода одно из измерений символа (максимальное в шрифте) лучше не делать больше 8 пикселов. Иначе скорость вывода упадет весьма и весьма.

CityAceE
30.07.2007, 16:25
Иначе скорость вывода упадет весьма и весьма.
Да, при использовании такиих шрифтов скорость вывода будет просто черепашьей, это понятно с самого начала... Но всё же поэкспеременитровать можно :)

Vitamin
30.07.2007, 17:01
Если что, могу подкинуть достаточно быструю процедуру печати пропорциональным шрифтом до 8 пикселов высотой. Она правда достаточно навороченная, но можно обчекрыжить что не надо.

CityAceE
31.07.2007, 03:06
Я попробую написать поцедру сам. А потом мы попробуем её здесь все вместе оптимизировать. Хорошо?

Vitamin
31.07.2007, 16:47
Да без проблем :)

GriV
31.07.2007, 20:53
я занимался вопросами вывода щрифтов с различным коэффициентом масштаба по X и по Y
и самым удобным решением было придумано мной - это использование растровых букв максимального размера + сжатие их до нужного размера. Процедуру и шрифты имеет смысл искать (оно видимо на реальных дисках, с этим как всегда сложно...)? В целом работало достаточно быстро - если размер малый (8x8 точек), то почти махом выводились. Исходные буквы имели размер 8x8 знакомест (64x64 точки).

Grand
07.08.2007, 03:23
В целях оптимизации скорострельности вывода одно из измерений символа (максимальное в шрифте) лучше не делать больше 8 пикселов.Я тоже согласен с этим. И такая процедура мной уже написана. Вот результат ее работы.

http://grands.land.ru/pict/stv2.png

Каждый символ может иметь свой размер от 8 по Y и вплоть до 255 по X. Чтобы они не сливались, может быть задан межстрочный интервал.