реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> масштабирование шрифтов, KS0108
antoxa1
сообщение Feb 11 2007, 17:05
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 6-04-06
Пользователь №: 15 889



Доброго времени суток!
В сети я нашел кучу примеров для работы с графическими ЖК индикаторами, посмотрев их, выяснил, что разработчики хранят шрифты в массивах(к примеру):
/* Таблица фонта 8x8 */
const uint8_t font_08x08_table[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00 */
0x7E,0x81,0xA5,0x81,0xBD,0x99,0x81,0x7E, /* 01 */
0x7E,0xFF,0xDB,0xFF,0xC3,0xE7,0xFF,0x7E, /* 02 */
0x6C,0xFE,0xFE,0xFE,0x7C,0x38,0x10,0x00, /* 03 */
0x10,0x38,0x7C,0xFE,............

У меня в программе есть один шрифт размером 6х8, включающий буквы двух алфавитов(RUS и EN) и цифры. В начале этого хватало, но в связи с модернизацией программы всплыла необходимость использовать ещё и некоторые символы размером 12х16 (для улучшения читаемости выводимой информации). На описание ранее приведенным способом всего набора необходимых символов потребуется увеличение объема памяти программ(которой для свободного использования осталось немного). Вопрос мой состоит в следующем: можно-ли используя описание необходимых символов из шрифта 6х8 путем масштабирования получить те же символы но размером 12х16? Какие алгоритмы для этого используются? Где можно посмотреть еще информацию по вопросу? Пользовался ли кто-нибудь такими методами и каково их быстродействие?
P.S. устройство собрано и аппаратной модернизации не подлежит, так что варианты увеличения памяти путем прикручивания дополнительных микросхем не подходят.
Go to the top of the page
 
+Quote Post
zorromen
сообщение Feb 11 2007, 18:40
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Вывод больших символов вызовет проблемы ... куда большие чем просто шрифт 6х8 ... есть вопрос как еще выводить символы ... в начале каждой страницы или в любом месте ... если только в начале ,то не требуется ничего сдвигать ... то теряется универсальность, что можно рисовать в любом месте ... а так как мало памяти программ то придется написать или универсальную функцию или пересмотреть подход к выводу изображения как таковой ...
Опишите какими ресурсами вы распологаете ... сколько свободного ОЗУ и Флеш-программ...
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Feb 11 2007, 18:43
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(antoxa1 @ Feb 11 2007, 17:05) *
состоит в следующем: можно-ли используя описание необходимых символов из шрифта 6х8 путем масштабирования получить те же символы но размером 12х16? Какие алгоритмы для этого используются? Где можно посмотреть еще информацию по вопросу? Пользовался ли кто-нибудь такими методами и каково их быстродействие?

Что можно - сомнений нет. Вот только буквы будут очень "квадратные" - точки-то станут вдвое больше по ширине/высоте, и смотреться это будет так себе. Сделать какой-то "умный" конвертор - геморройно, отожрет еще памяти и будет тормозить. А просто тупо увеличить - тривиально, каждый байт превращаем в два (циклом или выборкой по таблице для каждого ниббла - табличка в 16 байтов), и результат выводим дважды (конкретнее - зависит от способа вывода в индикатор).
Go to the top of the page
 
+Quote Post
antoxa1
сообщение Feb 11 2007, 19:02
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 6-04-06
Пользователь №: 15 889



Про железо: ATMega8515(8К flash, 512RAM и немного EEPROMa), на нем висит 4 кнопки +ks0108.
Вывод планируется с любой позиции(причем с набором символов 6х8 он и реализован).
Go to the top of the page
 
+Quote Post
slog
сообщение Feb 11 2007, 21:00
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Тебе лучше хранить 12х16 (если хватит памяти), а 6х8 получать масштабированием. Иначе крупный шрифт будет некрасивый.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
el34
сообщение Feb 11 2007, 21:12
Сообщение #6


инженер
****

Группа: Свой
Сообщений: 717
Регистрация: 4-03-05
Пользователь №: 3 064



2antoxa1
вот Вам пример программы.....
http://www.microsyl.com/nokialcd/nokialcd.html

выглядят x2 фонты очень даже нормально...


--------------------
........поужинали вяленой рыбой, кот лежал рядом, молчали.......
Go to the top of the page
 
+Quote Post
antoxa1
сообщение Feb 11 2007, 21:13
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 6-04-06
Пользователь №: 15 889



А ссылки на примеры реализации или "теорию" кто-нибудь видел? Если да, то поделитесь пожалуйста.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Feb 11 2007, 22:00
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(slog @ Feb 11 2007, 21:00) *
Тебе лучше хранить 12х16 (если хватит памяти), а 6х8 получать масштабированием. Иначе крупный шрифт будет некрасивый.

Что совой об пенек, что пеньком об сову... Помимо того, что масштабирование из большого в маленький заведомо более ресурсоемко (это в придачу к вчетверо большему объему фонта), так и у тщательно и любовно прорисованного"большого" фонта при уменьшении запросто "слипнутся" точки или появятся иные искажения. Нет уж, если с программной памятью так плохо, что большой фонт не влезает (а тут пахнет минимумом половиной программной памяти 8515) - тогда просто удваивать по ширине и высоте, и координаты знакомест при выводе удваивать. Это лучше чем ничего. А для мелких индикаторов - насущная необходимость...
Go to the top of the page
 
+Quote Post
afad
сообщение Feb 12 2007, 12:30
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545



Лучше хранить 2 знакогенератора, примеры шрифтов можно посмотреть в UCOS->GUI->FONT.
Для уменьшения объема знакогенератора я делал так: в знакогенераторе прописал все латинские буквы, затем только те русские, которые начертанием отличаются от латинских, при обращении к знакогенератору добавлена перекодировочная таблица КОД ASCII -> позиция символа в знакогенераторе. Если количество надписей ограничено, можно в знакогенераторе оставить только используемые символы - экономия памяти.
Go to the top of the page
 
+Quote Post
antoxa1
сообщение Feb 13 2007, 15:01
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 6-04-06
Пользователь №: 15 889



2el34
Спасибо за ссылку! Помогло!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01437 секунд с 7
ELECTRONIX ©2004-2016