Форум: "Прочее";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];
ВнизНеясности в формате файла Найти похожие ветки
← →
Виталий © (2010-07-07 12:02) [0]Здравствуйте. Пишу приложение, которое должно сохранять нарисованые пользователем картинки в фалй .FNT (простите за древний формат, это необходимость). Стал разбираться с форматом файла. Неясен следующий момент:
The following is a single-character example, in which
are given the bytes for a 12 x 14 pixel character, as
shown here schematically.
............
.....**.....
....*..*....
...*....*...
..*......*..
..*......*..
..*......*..
..********..
..*......*..
..*......*..
..*......*..
............
............
............
The bytes are given here in two sets, because the
character is less than 17 pixels wide.
00 06 09 10 20 20 20 3F 20 20 20 00 00 00
00 00 00 80 40 40 40 C0 40 40 40 00 00 00
Можете пояснить, каким образом появилась представленая последовательность?
Формат файла тут: http://support.microsoft.com/kb/65123
← →
Демо © (2010-07-07 12:13) [1]
> Можете пояснить, каким образом появилась представленая последовательность?
А весь дамп нельзя выложить?
← →
Виталий © (2010-07-07 12:18) [2]Дамп чего? Это фрагмент из описания от MS. Я не могу понять, как буква "A" выражена этими числами. Точки как-то не совпадают.
← →
Sha © (2010-07-07 12:26) [3]Каждая вертикальная пара байтов кодирует одну строку растра.
← →
Palladin © (2010-07-07 12:29) [4]
> Виталий © (07.07.10 12:18) [2]
переведи 6, а потом 9, в двоичный и поймешь
← →
Виталий © (2010-07-07 12:43) [5]Не понимаю ( Вертикальная пара - это 06 00 ?
Ну получается скажем 011000 - что из этого?
← →
Palladin © (2010-07-07 12:44) [6]мля! я же сказал "а потом 9", что лень чтоли?
← →
Palladin © (2010-07-07 12:45) [7]и не 011000, а 000110
разворот делаем, да
← →
Palladin © (2010-07-07 12:46) [8]тьфу... до 8 байт спереди.... короче... не тупи
← →
RWolf © (2010-07-07 12:46) [9]байты соответствуют колонке 8 точек шириной сверху вниз, очевидно же.
← →
Palladin © (2010-07-07 12:48) [10]
> до 8 байт спереди.
бит то есть
← →
Плохиш © (2010-07-07 12:48) [11]
> Виталий © (07.07.10 12:43) [5]
>
> Не понимаю ( Вертикальная пара - это 06 00 ?
> Ну получается скажем 011000 - что из этого?
>
Хм, и как ты умудрился из 0600 011000 получить?
← →
Sha © (2010-07-07 12:48) [12]> Виталий © (07.07.10 12:43) [5]
> Не понимаю ( Вертикальная пара - это 06 00 ?
> Ну получается скажем 011000 - что из этого?
Нет. Получается 00000110 00000000. Из этих битов берем только 12.
← →
RWolf © (2010-07-07 12:49) [13]и да, редакторов FNT великое множество.
← →
Виталий © (2010-07-07 12:56) [14]
> Хм, и как ты умудрился из 0600 011000 получить?
я идиот, убейте меня кто-нибудь :)
> мля! я же сказал "а потом 9", что лень чтоли?
не ругайтесь. Не лень, просто с шестеркой понять надо. Уже понял, спасибо
> и да, редакторов FNT великое множество.
найти бы какой-то с исходниками и посмотреть, как пишут реальные кодеры. А так - в меру своих скромных сил.
← →
Amoeba_ (2010-07-07 13:39) [15]
> RWolf © (07.07.10 12:49) [13]
>
> и да, редакторов FNT великое множество.
К примеру, такой есть в Borland Resource Workshop (входит в комплект Borland Pascal).
← →
Виталий © (2010-07-07 22:19) [16]Блин, не могу понять, а где используется структура GlyphEntry?
← →
Виталий © (2010-07-07 22:43) [17]Кажется, понял: эта структура входит в главную структуру файла (по крайней мере, чисто технически ее можно не выделять). Остается только вопрос: как, пусть для примера имея пока что матрицу из 0 и 1 (думаю, в отделении логики и представления она и так будет присутствовать) "собрать" совокупность байтов?
← →
Sha © (2010-07-08 00:42) [18]> "собрать" совокупность байтов
i:=0;
for dx:=0 to maxdx do if pixel[dy,dx] then i:=i+weight[dx];
← →
Виталий © (2010-07-08 09:36) [19]То есть мне не нужно представлять данные в виде "вертикального набора". Теперь понял.
Мда, однако в формате столько разных мелочей, что написать его, видимо, не смогу - гугль ничего не дает, а из описания неясно, например, как разделять "битмапы". Ни у кого нету хотя бы небольшого примера кода, показываюещего, как заполнять все структуры файла, или пояснения этого более подробного, чем от MS?
← →
Виталий © (2010-07-09 00:02) [20]Ладно, дабы не мучать тупыми вопросами, буду пытаться постигнуть сам. Помогите тогда с конкретикой.
dfPitchAndFamily
Specifies the pitch and font family. The low bit is set
if the font is variable pitch. The high four bits give
the family name of the font. Font families describe in
a general way the look of a font. They are intended for
specifying fonts when the exact face name desired is
not available. The families are as follows:
Family Description
------ -----------
FF_DONTCARE (0<<4) Don"t care or don"t know.
FF_ROMAN (1<<4) Proportionally spaced fonts
with serifs.
FF_SWISS (2<<4) Proportionally spaced fonts
without serifs.
FF_MODERN (3<<4) Fixed-pitch fonts.
FF_SCRIPT (4<<4)
FF_DECORATIVE (5<<4)
Как это поле заполнить в Delphi?
← →
0x00FF00 (2010-07-09 02:42) [21]
> Как это поле заполнить в Delphi?
поскольку юзер может намазюкать что угодно, и его ахинея "на выходе" может представлять собой в общем случае любой из стилей, выбирайте FF_DONTCARE.
ну, и младший бит сбросьте, если предоставляете фиксированную ширину канвы для всех символов, или взведите, если ширину можно задать свою для каждого символа в отдельности (скажем, у "пробела" ширина — 7, у буквы А — 12, у буквы М — вообще 15, итд).
← →
0x00FF00 (2010-07-09 02:46) [22]
> юзер может намазюкать
> его ахинея "на выходе"
Во блин, прям как по Фрейду...
Крепко ж они достали. В отпуск пора =)
← →
Виталий © (2010-07-09 10:32) [23]То есть, насколько я понимаю, поле должно быть равным нулю?
← →
0x00FF00 (2010-07-09 12:53) [24]
> То есть, насколько я понимаю, поле должно быть равным нулю?
/да. FF_DONTCARE + фиксированная ширина = $00000000.
← →
Sha © (2010-07-09 13:45) [25]> Виталий ©
Если на принтер будешь выводить сам, то может оказаться проще выводить в графическом режиме.
В этом случае отпадет необходимость изучения формата и загрузки фонта в принтер.
← →
Виталий © (2010-07-09 21:34) [26]Да тут принтер-то не нужен. Хочу написать именно редактор, просто формат (для меня) более-менее сложный и хочу понять на его примере, как работать с форматами файлов, что называется, на низком уровне. Можно еще вопросы задавать?
← →
0x00FF00 (2010-07-09 21:52) [27]
> Можно еще вопросы задавать?
когда-то один мудрый модератор сказал мне, нерадивому падавану:
— Don"t ask to ask, just ask.
и я ушёл просветлённый =)
← →
Виталий © (2010-07-11 22:01) [28]dfFirstChar 1 byte specifying the first character code defined by
this font. Character definitions are stored only for
the characters actually present in a font. Therefore,
use this field when calculating indexes into either
dfBits or dfCharOffset.
dfLastChar 1 byte specifying the last character code defined by
this font. Note that all the characters with codes
between dfFirstChar and dfLastChar must be present in
the font character definitions.
dfDefaultChar 1 byte specifying the character to substitute
whenever a string contains a character out of the
range. The character is given relative to dfFirstChar
so that dfDefaultChar is the actual value of the
character, less dfFirstChar. The dfDefaultChar should
indicate a special character that is not a space.
dfBreakChar 1 byte specifying the character that will define word
breaks. This character defines word breaks for word
wrapping and word spacing justification. The character
is given relative to dfFirstChar so that dfBreakChar is
the actual value of the character, less that of
dfFirstChar. The dfBreakChar is normally (32 -
dfFirstChar), which is an ASCII space.
Можете пояснить принцип расстановки значений в этих полях? И особенно неясно 32 -dfFirstChar
← →
Sha © (2010-07-11 22:05) [29]Думаю, тут словарь нужен.
← →
Виталий © (2010-07-12 10:15) [30]Зачем? Я могу перевести этот текст.
1 байт, определяющий код первого символа шрифта - какой код должен быть? Использовать обычную таблицу ASCII?
Кроме того, упомянуто, что это поле будет использоваться для подсчета индексов в dfBits или dfCharOffset. Таких полей в описании формата нет!
1 байт, определяющий код последнего символа - тот же вопрос.
Символ, определяющий замену, если строка содержит символ, отсутствующий в диапазоне (символов?). Сказано, что он "относителен" от dfFirstChar, поэтому он ялвяется "актуальным значением" символа, меньшего dfFirstChar. Что это за символ? Как он может выглядеть, если далее указано, что это не пробел. Каково его значение?
1 байт, определяющий символ для отделения слов друг от друга. Он ТОЖЕ меньше dfFirstChar, и обычно его значение 32-dfFirstChar (и каково же оно?) и обычно является пробелом. Смотрим в ASCII таблицу: пробел - это символ с кодом 32. Получаем 32 = 32 - dfFirstChar => dfFirtChar = 0.
32 < 0??? Ничего не понимаю.
← →
Sha © (2010-07-12 10:31) [31]> Виталий © (12.07.10 10:15) [30]
> Я могу перевести этот текст.
Осталось понять...
Фонт может содержать изображения не всех символов,
а например, только больших или равных пробелу.
Вот его и требуется указать.
Про индексы забудь. Ты же не сам будешь печатать
и доставать изображения символов из фонта.
Здесь имеется в виду, что тот, кто будет это делать,
должен учитывать, что фонт может начинаться не с #0.
← →
Виталий © (2010-07-12 10:55) [32]Не совсем понял - "не сам будешь печатать
и доставать изображения символов из фонта."
А кто это делать будет?
И можете таки ответить на ряд моих вопросов выше?
← →
Anatoly Podgoretsky © (2010-07-12 11:12) [33]> Виталий (12.07.2010 10:55:32) [32]
Это будет делать подсистема печати.
← →
Sha © (2010-07-12 11:12) [34]> Не совсем понял - "не сам будешь печатать
см. [25]
Грубо способы общения с принтером (описаны в документации к нему):
- посылка символов,
- посылка управляющих команд,
- посылка графики.
Ты, похоже, не собираешься делать третье,
поэтому тебе не надо уметь разбирать свой фонт
и вычислять положение изображения символа в нем.
> И можете таки ответить на ряд моих вопросов выше?
Ты легко это сделашь сам, сравнивая описание формата
с отпечатанной ASCII-таблицей и содержимым файла
использованного при печати фонта.
← →
Виталий © (2010-07-12 12:15) [35]Мне НЕ нужен вывод на печать. Еще раз: я хочу формировать файл шрифта и читать его (если угодно, пиксели выводить на канве TImage потом). Поэтому таки мне как разн надо уметь и сохранить фонт и разобрать его при загрузке файла.
И не могу я сделать это сам - нет у меня на данный момент ни фонта, и не помогает мне ASCII-таблица.
В общем, пояснений мне никто дать не может.
← →
Sha © (2010-07-12 12:48) [36]> Виталий © (12.07.10 12:15) [35]
Еще один партизан.
Если б сразу сказал, что тебе надо, самому было бы проще.
Из условий задачи вовсе не следует, что фонт
обязан храниться в каком-то наперед заданном формате.
Придумай свой формат, который тебе удобен, и все.
← →
Виталий © (2010-07-12 12:59) [37]Да не молчал я!
Я объясню, чего я хочу: понять принцип работы со сложными форматами. Все, что я вижу, имеет обертку - сами читаются джейпеги и гифы многочисленными классами, сами же они сохраняются, и другие форматы тоже имеют многочисленные классы для их чтения.
А я хочу понять, как оно выглядит на "низком" уровне, научиться писать и читать из файлов по правильной документации к формату. И вот прошу мне объяснить, как оно происходит. И выбрал формат .FNT, только и всего.
Вот сейчас меня остановили непонятности в символах. Хочу понять, как индексы у них устроены. Подскажите же кто-нибудь, дайте совет, что посмотреть, как исследовать и уяснить себе этот момент.
← →
Sha © (2010-07-12 13:16) [38]> Хочу понять, как индексы у них устроены.
Нету у них индексов. В твоем случае это виртуальное понятие.
Индексом в англоязычной технической литературе, в частности,
называется порядковый номер элемента в ряду таких же элементов.
> Подскажите же кто-нибудь
Уже. См. [36]
Это самое простое решение, если появляются вопросы, подобные
http://delphimaster.net/view/2-1278658000/
← →
Anatoly Podgoretsky © (2010-07-12 13:33) [39]На нижнем уровне говоришь, тогда тебе нужен учебник по АПИ и настольная книга в виде MSDN
← →
Виталий © (2010-07-12 13:34) [40]Зря вы на мне ставите крест. Появился вопрос - спросил. Хотя, как теперь вижу, лучше бы и не спрашивал. Впрочем, понимаю: пояснять что-то никому просто не надо и не хочется. Спасибо.
Страницы: 1 2 3 4 5 6 7 8 9
10 11 12 вся ветка
Форум: "Прочее";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];
Память: 0.63 MB
Время: 0.007 c