![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
У кого нибудь есть наработки (функции) для работы с графическим одноцветным индикатором. Например вывод картинки в любую точку экрана с наложениями и ограничиванием области прорисовки. а также аналогичные функции вывода на экран текста?
-------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 2 Всего: 29 |
Какой индикатор? на чём делаешь? общие или конкретные функции нужны?..
По теории-то никаких проблем не должно быть: бери да рисуй... |
|||
|
||||
Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
Впринцыпе, конечно ничего сложного. На дисплей картинка передается в виде 1 байт=8 точек в ряд.
чтобы нарисовать картинку 8*8, надо передать 8 байт расположенных вертикально. а если надо нарисовать картинку шириной не 8 точек а например 10, и позицию по X например 5. это нужно считать байт с экрана, взять байт картинки смещенный в право на 6 бит, сложить их и положить на экран. а тут еще надо наложить по XOR, а потом еще установить границы, за каторые залезать нельзя. Если есть такие алгоритмы, то буду рад заполучить. Я уже полтара дня пишу такие функции. функции желательно на C/C++, можно и на ASM. Дисплей: WG320x240C. -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
когда-то занимался подобными вещами, исходников, конечно, не осталось, но принцип был такой:
делаем в памяти два массива: 1. изображение, которое должно быть на экране (массив байтов) 2. массив битов, который показывает, какие байты из первого массива надо передать на экран алгоритм приблизительно такой: 1. начало работы: очищаем экран, заполняем нулями оба массива 2. рисование отдельного пиксела: берем байт из первого массива и меняем в нем бит, как нам надо, устанавливаем во втором массиве бит (типа, байт изменился, надо его передать) 3. синхронизация: идем по второму массиву, ищем 1-цы, как только нашли - берем из первого массива соответствующий байт и передаем в общем на самом деле рисуем мы у себя в памяти и время от времени синхронизируем изображение на экране и в памяти как часто - зависит от ситуации если, например, надо нарисовать 1 пиксель, и пользователь должен сразу его увидеть, надо, конечно, вызывать синхронизацию после рисования пиксела, но если рисуется, например строка какая-то, то можно сначала ее нарисовать, а потом один раз синхронизировать, так быстрее получится (ведь обычно канал передачи медленнее скорости работы контроллера) -------------------- qqq |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
а функции, кстати, несложные...
Добавлено @ 14:11 кроме того, иногда контроллер дисплея сам переводит курсор на следующий байт для удобства записи последовательных блоков, тогда может оказаться выгоднее посылать изображение целыми кусками, а близлежащие куски даже специально соединять... но это все, если тормозит... -------------------- qqq |
|||
|
||||
Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
Ну вопервых у меня нет свободных 9 килобайт в оперативке, да я уже и смерился с тем, что я читаю информацию с индикатора. Мой вопрос не в этом.
Мне нужен алгоритм вычисления, как эту картинку обрезать, сжвинуть побитно и наложить на экран. Вот например моя функция вывода картинки на экран в любую точку экрана, лубой ширины и с любым наложением.
Но эта функция на мой взгляд грамоска. Подобную функцию написал для вывода текста, еще побольше получилась. А когда написал обе функции с дополнительным параметром области разрешенной для рисования, они стали еще раза в полтора больше. Вот я и подумал, неужели никто таких функций никогда не писал, и решил спросить. Это сообщение отредактировал(а) Ivan. - 11.8.2005, 07:16 -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
prottoss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Привет!
Посмотри на моем сайте. Есть мои исходники под IAR C и ImageCraft C для AVR + LCD 122x32. Там четыре варианта - по 2 на каждый компилер. Для каждого компилера вариант с константами (знакогенератор, картинки) в памяти программ МК и вариант с внешней EEPROM AT25xxx. Драйвер поддерживает: 1. Начальная инициализация дисплея; 2. Очистка произвольной области экрана; 3. Закраска произвольной области экрана; 4. Инвертирование произвольной области экрана; 5. Скроллинг произвольной области экрана (вверх, вниз, влево, вправо) с очисткой(закраской) освобождающейся области; 6. Скроллинг произвольной области экрана (вверх, вниз, влево, вправо) с заполнением рисунком освобождающейся области; 7. Циклический скроллинг произвольной области экрана (вверх, вниз, влево, вправо); 8. Вывод текста в произвольную область экрана; 9. Эффект бегущей строки в произвольной области экрана; 10. Рисование линий по алгоритму Брезенхема; 11. Закраска(очистка) пикселя в произвольном месте экрана. Вообще организация дисплея 122х32 практически такая же как 320х240 + исходники на С - я думаю разобраться можно. Одно НО. Архив на сайте запаролен. Пароль знаю я, и он стоит денег. Пиши, может договоримся. Это сообщение отредактировал(а) prottoss - 11.8.2005, 20:38 |
|||
|
||||
Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
спасибо, но пункты:1, 2, 3, 4, 10, 11 у меня уже есть, 8 - впринцыпе тоже есть, а функции, каторые я хотелбы найти - боюсь, что у тебя нет.
-------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
prottoss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
ну так скажи, что за функции? |
|||
|
||||
Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
Повторяю, нужны функции вывода на экран картинки в любую координату с любым наложением и ограничением в окно. Например: экран 320*240. мне нужно вывести картинку в координату (10, 10) размером (20*20) с наложением XOR и ограниченную окном (L:15, T:15, R:25, B:25).
И соответствующую функцию вывода текста. Естественно эти функции должны быть оптимизированы на скорость. Хоть у меня и контроллер 32х разрядный на 60 MHz. -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |