Как конфертировать из алфавитов в пиксели

Вы знаете программу или скрипт, который преобразует букву в матрицу (состоящую из 0 и 1), представляющую букву? Например, от буквы I к матрице что-то вроде этого: (это светодиодная панель с буквой I):

Пожалуйста, дайте мне знать, как создать такую матрицу, кроме ручной печати
Спасибо.

Ответы на вопрос(2)

Решение Вопроса

хорошо для реализации HW я обычно использовал шрифт EGA / VGA 8x8

извлечено из карты gfxBIOS Вы можете сделать это легко вMS-DOS окружающая обстановка

Другой способ заключается в том, чтобы извлечь шрифт программно из изображения

нарисовать весь шрифт в растровом изображении (в строке или в матрице ..., или использовать уже созданный, как у меня). Используйте фиксированный шаг, размер шрифта, наиболее подходящий вашим потребностям, и не забывайте, что почти ни один современный шрифт не поддерживает фиксированный шаг, поэтому используйтеOEM_CHARSET а такжеSystem названный шрифт из него. Правильно установите цвет (идеальным является черный фон и белый шрифт), считывайте изображение попиксельно и сохраняйте его в виде таблицы чисел. Пиксель с не фоновым цветом задается пикселем.

Не сравнивайте с цветом шрифта из-за сглаживания и фильтров, Теперь прочитайте все символы и установите / измените соответствующий бит внутри таблицы шрифтов. Первый вычислительный запускx,y персонажа в изображении (отASCII организация кода и изображения) затем выполнить 2 вложенных 8 шагаx,y для петель (в порядке согласно вашемуfont[] организация)

set/res соответствующийfont[] биты по адресам8*ASCII в8*ASCII+8

Я полагаю, вы используете MCU для управления светодиодной панелью

организация шрифтов в памяти обычно состоит в том, что 8-битное число представляет одну строку в символе. Конечно если твойСВЕТОДИОД Панель предназначена для отображения анимированной прокрутки, затем организация столбцов шрифта, а также реализация HW значительно облегчит работу. Если у вас есть 16 битMCU а такжеIO доступ, чем вы можете использовать16-bit / Размер шрифта в пикселях.

если у вас более 8 пикселей и только 8-битный MCU, вы все равно можете использовать 16-битные данные, но доступ к IO будет осуществляться в два этапа через два порта IO вместо 1.Я настоятельно рекомендую весь доступ к вводу-выводу в масштабе данных вместо установки / восстановления отдельных линий ввода-вывода это намного быстрее и может предотвратить мерцание

Хорошо вот мой старый8x8 шрифт, который я использовал в те дни ... Я думаю, что этот извлечен изEGA / VGA BIOS но я не берег ... это было слишком много лет назад

Теперь самое интересное

const BYTE font[8*256]={ 0,0,0,0,0,0,0,0, ... }

любой символ представлен в виде 8 чисел. если бит0 тогда это означает бумагу (фоновый пиксель), если бит1 тогда это означает чернила (пиксель шрифта). Теперь есть больше комбинаций (слева направо, сверху вниз и их комбинации)

OK (строчные тиски | слева направо | вверх вниз) означает:

первый номер вверх по ряду символовMSB самый левый пиксельLSB правый самый пиксель

так, например, char '1' в8x8 будет что-то вроде этого (b означает двоичное число):

00000000b,
00001000b,
00011000b,
00101000b,
00001000b,
00001000b,
00111100b,
00000000b,

Когда вы извлечете все символы в таблицу шрифтов, сохраните их как исходный код в файл, который вы позже включите в свойMCU код (можно разместить вEEPROM для пгм-кода)

Теперь алгоритм для печати на charСВЕТОДИОД Панель сильно зависит от вашей реализации HW

поэтому, пожалуйста, опубликуйте принципиальную схему соединения между светодиодной панелью и системой управления.указать целевую платформу и языкуказать желаемый функционал

Я предполагаю, что вы хотите левую прокрутку шаг за шагом

лучше всего подойдет, если ваша светодиодная панель управляется столбцами, а не рядами

Вы можете активировать один столбецСВЕТОДИОДс некоторымиданные ввода-вывода порт (все биты могут быть активны одновременно) и выбор того, какой из столбцов активен, управляется другимвыберите IO порт (только один бит может быть активен одновременно). Так что в этом случае вычислите начальный адрес столбца для отображения в таблице шрифтов:

address = (8*ASCII + x_offset)Отправитьfont[8*ASCII + x_offset] вданные ввода-вывода портактивироватьвыберите IO порт с правильным битом активенподождите некоторое время (1-10 мс) ... так что вы можете увидеть свет, если задержка слишком мала, тогда нет яркости, если задержка слишком велика, то есть мерцание, поэтому вам нужно немного поэкспериментировать (зависит от количества выбранных биты).дезактивироватьвыберите IO портповторить со следующей колонкойx_offset это прокрутка

если ваша реализация HW не подходит таким образом, не беспокойтесь

просто используйте битовые операции SHIFT, AND, OR для создания слов данных в памяти и затем отправляйте их аналогичным образом

Надеюсь, это поможет немного

 user177619430 мар. 2014 г., 04:31
Большое спасибо!!!! Это блестящая идея!
 Spektre30 мар. 2014 г., 11:02
@ user1776194 Я вижу, что у вас еще нет проверенных ответов ... если какой-либо ответ на ваш вопрос полезен, вы можете проголосовать (я не уверен, что вы можете проголосовать немедленно или вам нужно какое-то повторение за него), его за этот маленький треугольник над голосованием число, если оно неверно, оскорбительно ... тогда вы можете проголосовать за него, чтобы этот треугольник возлюбил тот же номер. если ответ приводит к решению вашей проблемы, вы должны проверить его, нажав на флажок под треугольниками голосования. Он присуждает очки ответа автору ответа, а также помечает ваш вопрос как ответивший. (также я думаю, что вы заработаете несколько значков, как принятый первый ответ)
 Spektre09 дек. 2013 г., 12:09
Да, и если у вас мало памяти, вы можете использовать только алфавит и цифры ... забудьте о специальных символах, чтобы у вас было меньше данных о шрифтах, но тогда ваша кодировка строки должна соответствовать вашему шрифту ... или пропустить первые 32 символа и последние 128 символов, которые экономят больше половины памяти

который выглядит так, как вы хотите (вероятно, моноширинный шрифт, такой как Courier), нарисовать / растеризовать его с определенным размером (8pt?) Без сглаживания и преобразовать полученное изображение в формат матрицы. ,

Ваш ответ на вопрос