![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
magdelphi |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 5.3.2007 Где: г. Иваново Репутация: 2 Всего: 2 |
Magdelphi 2008 Использование Windows шрифтов в J2ME
Предоставляемые возможности вывода текста в MIDP не позволяют в полной возможности воплотить задуманные решения. Столкнувшись в очередной раз с этим ограничением и не найдя готового решения написал небольшое приложение на Delphi и java класс позволяющий использовать всё многообразие шрифтов Windows. Утилита FontGen.exe позволяет создать образы шрифтов с учётом размеров и стилей который сохраняется в файле font.png . Также создается файл font.dat с описанием расположения символов и служебной информацией. Рассмотрим формат файла font.dat
Дальше поместив эти файлы в папку res j2me приложения используйте класс FontClass
Пример использования Архив с FontGen.exe, FontClass и примером прилагаю Это сообщение отредактировал(а) W0LF - 18.6.2008, 13:28 Присоединённый файл ( Кол-во скачиваний: 59 ) ![]() |
||||
|
|||||
Samuil |
|
|||
![]() в(Job)ываю ![]() ![]() Профиль Группа: Участник Сообщений: 705 Регистрация: 26.4.2006 Где: Uzbekistan.Tashke nt Репутация: 5 Всего: 6 |
magdelphi, Молодец! Я думаю эту тему надо дабавить в ФАК! Информация Важна для начинающих и не только!
|
|||
|
||||
eugine_s |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Нормальная утилита.
Вот возможные доработки: 1) На выходной картинке слишком большие отступы между символами. Они не нужны - только место занимают. (Создал шрифт MSSansSerif 10 жирный - размер получился 3680 x 16 - имхо, это очень много для шрифта.) Символы нужно рисовать на картинке в плотную, без всяких пробелов. А в программе, если нужно будет, то можешь сам добавить нужный отступ между символами. 2) Часть символов реально никогда не используется. На картинке они располагаются между английскими и русскими буквами. Их можно "выбросить". 3) Ну и еще такое: чем отличается английская А от русской А, английская B от русской B, C от С, а от а ...? Реально - ничем. Соотвественно на выходном картинке шрифта часть символов можно отбросить. |
|||
|
||||
magdelphi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 5.3.2007 Где: г. Иваново Репутация: 2 Всего: 2 |
Для этого большие интервалы между символами и сделал чтобы можно было легко выбрасывать и всталять,
но меняя расположение символов не забудь изменить и логику работы в классе FontClass и без того работающего достаточно медленно. Зачем экономить память в ушеб быстродействию? Тем более 48кбайт по Memory monitor для моего примера это не много, а там шрифт ArialBlack 36. |
|||
|
||||
eugine_s |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Тогда этот параметр - отступ между символами нужно указывать где-то в настройках, чтобы его можно изменить. В j2mе есть смысл экономить память, тем более на таких вещах и тем более я не вижу как это сказывается на быстродействии.
Nokia 7070 Prism S40 DP5 heap = 600 кб. Как ты думаешь 50 кб для такого телефона существенно? Я конечно не знаю, что у тебя монитор показывает, но вот сколько занимает в памяти только одна картинка твоего шрифта ArialBlack 36: ширина * высоту * 2 (внутренее представление картинки в памяти Java - 2 байта на один пиксель) = 5000 (точно не помню, где-то столько пикселей) * 36 * 2 = 350 кб Т.е. 350 кб только под одну картинку шрифта и это не просто много, А ОЧЕНЬ МНОГО. (48 кб у тебя могло показать, так как в некоторых телефонах есть кроме heap памяти еще память для картинок). тут 110 кб - это тоже многовато. |
||||
|
|||||
magdelphi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 5.3.2007 Где: г. Иваново Репутация: 2 Всего: 2 |
Можно конечно создать png для каждого символа. Тогда с памятью будет всё очень хорошо, но скорость?
|
|||
|
||||
eugine_s |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
||||
|
||||
magdelphi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 5.3.2007 Где: г. Иваново Репутация: 2 Всего: 2 |
Нет не шутка, я имел ввиду можно к примеру, сделать не один а 4 файла для каждого шрифта 1-латиница 2-цифры 3-спецсимволы 4-кириллица, которые будут загружаться по мере необходимости. Единственная проблема скорость.
|
|||
|
||||
smke444 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 11.6.2007 Репутация: нет Всего: нет |
Вот нарыл еще одну утилиту для создания автоматически PNG файла с любой последовательностью букв используя Windows шрифты, думаю многим пригодится
![]() ![]() Присоединённый файл ( Кол-во скачиваний: 20 ) ![]() |
|||
|
||||
igorka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 28.6.2007 Репутация: нет Всего: нет |
Классная штука. Удобно.
Но, есть однО бОльшое нО! Сони-эрики выкидывают java.lang.OutOfMemoryError при использовании шрифтов размером от 28 и больше((. А мне надо именно такой шрифт (28-й и 48-й). И еще если мне надо только 0-9 зачем мне в ресурсах держать весь алфавит? Автор, хелп!!! |
|||
|
||||
eugine_s |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Возьми .png (который программа генерируте), открой в фотошопе и скопируй нужные символы (0-9) в новую картинку. Сохрани png. Сгенерируй описание png (можно сгенерировать или можно в программе захардкодить). Или smke444 выложил утилиту, которой можно ввести любую последовательность символов. Это сообщение отредактировал(а) eugine_s - 21.9.2009, 13:40 |
|||
|
||||
igorka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 28.6.2007 Репутация: нет Всего: нет |
Я просто обрезал пнг файл, оставил часть только до цифр.
как сгенерить описание не разбирался, поэтому сделал именно так. Заработало. Утилита которую выложил smke444 упорно отказывается работать... ну и ладно. Кста, время отрисовки этих шрифтов просто жесть, даше на шустреньких SE очень медленно, представляю что будет на сименсах и моторах. Надо будет где-то оптимизировать. Как разберусь где, отпишусь. |
|||
|
||||
eugine_s |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
||||
|
||||
smke444 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 11.6.2007 Репутация: нет Всего: нет |
Хорошая новость – нарыл другую утилиту, на много лучше прежней, сие чудо называется PopCap Games Framework v1.3, качаем здесь http://sourceforge.net/projects/popcapframework/
Особенности : - рисует любую последовательность букв - работает коректно ( в font4mobile – были замечены глюки) - утилита проверки фонта / png картинки на валидность - пространство между буквами в картинке - 1 пикселЬ ! - и самое главное – прога генерирует dat файл со смешениями, ширинами букв в картинке !!! Пользуюсь только ей. ![]() Это сообщение отредактировал(а) smke444 - 24.9.2009, 17:28 |
|||
|
||||
aRixx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
Развивая тему шрифтов. Статья про использование собственных векторных шрифтов:
http://www.mobilab.ru/articles/113/ |
|||
|
||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |