Графическая библиотека для калькуляторов

Данная библиотека пригодиться не только для калькулятора Casio 9860, но и для любого другого, поддерживающего программирование на СИ.

Скачать можно здесь: https://github.com/errorcalc/ESLowGraphicsLibrary
(Там есть несколько примеров программ и скудный кусочек документации)

Для создания своих программ и демонстраций я использую свою графическую библиотеку написанную на СИ, и работающую на нескольких платформах, некоторое время назад, я решил "хватит жадничать" и выложил библиотеку ESLGL в открытый доступ. (можно изменять и использовать, как хочется, в не коммерческих целях :))

Библиотека имеет достаточно богатый список функций рисования, таких как:
* Точки
* Линии
* Эллипсы (в том числе заполненные)
* Прямоугольники (в том числе заполненные)
* Вывод изображений, с прозрачностью, маской, масштабированием, а также частично.
* Работа с 1-бит/4-битным изображениями
* Моноширинный шрифт
* Относительные координаты
* Режим позволяющий, не дорисовывать последний пиксель, что позволяет избегать повторного закрашивания(критично при рисовании цветом "инвертирование")
* Поворот на угол кратный 90, инверсия, отражение битмапа
* Начальная поддержка 3д с текстурами(без перспективы), градиентами, Z-buffer
* +утилита для конвертации картинок в массив char-ов+
* ...

Рисование производиться в специальный объект TBitMap, которых может быть сколько угодно/ну или на сколько хватит озу :)
Также можно рисовать непосредственно в видеопамять, главное получить адрес видеопамяти и создать статический BitMap: esCreateStaticBitMap(Ширина, Высота, ФорматПикеля, АдресВидеопамяти).

В моей демке Вы наверное заметили, что графика рисуется в 16 цветах, а выводиться на монохромный экран?
- Да ?
Так и есть, поскольку библиотека поддерживает 16 цветный режим, я рисую в нем, а на экран вывожу предварительно преобразовав в одноцветный режим, библиотечной функцией:
int Convert_pf4bit_To_pf1bit(PBitMap Dest, PBitMap Source);

Использовать ESLGL просто, взгляните на этот код:

#include "Graphics.h" 
 
main(void) 
{ 
  PBitMap BitMap; 
 
  BitMap = esCreateBitMap(100, 100, pf1bit);// создаем изображение в памяти 
 
  esClear(BitMap, 1);// заливаем белым
  esDrawRect(BitMap, 0, 0, 99, 99, 0);// черная рамка 
  esFillEllipse(BitMap, 0, 0, 99, 99, 0);// эллипс 
  esFillRect(BitMap, 0, 0, 99, 49, 2);// инвертируем половину экрана 
 
  YourSystemDrawToScreenFunction(BitMap);// твоя функция копирования битмапа в видеопамять
 
  esFreeBitMap(BitMap);// освобождаем ресурсы 

  return 0; 
} 

Данный код рисует такую картинку:

Как видите все действительно просто!

Если сообщество будет заинтересовано данной библиотекой, то я сделаю цикл статей о работе с ней.

Пишите комментарии и описания багов в багтрекер :)

Метки публикаций: 
Undefined

Комментарии

Билиотечка интересная, как я понимаю, адаптировать её под HP или TI в принципе возможно. И вспоминается давняя дискуссия по поводу архитектуры МК-161, не допускающего использование подобных наработок в принципе, а жаль.

Адаптировать ничего по большому счету не надо, главное получить адрес видеопамяти, или написать функцию обертку, копирующую рисующую изображение на экране, остальное из коробки :)
---
Да с МК-161 фейл, к системе не подступиться, и это печально.
Было желание написать для МК-161 бейсик с графикой, но из-за этого ограничения, все это только мечты...

Библиотечку можно перенести на МК-161, если перевести в код языка МК. При этом обращение к подпрограммам будет в формате Р ПП или КПП, а параметры передаваться через стек и регистры. Должно работать уж не медленней, чем на зарубежных калькуляторах.

Если делать Бейсик, лучше всего переходить на уровень микроконтроллера. Вскрыть обращение из W77LE516P к экрану и клавиатуре — самостоятельно или в нашей тёплой компании! :-)

Если вам удаться переписать на код языка МК - я только за.
Если вы скомпилируете в нативный код W77LE516P (компиляторы на данную архитектуру точно есть) - я буду только рад и готов подправить что-то в библиотеке, для совместимости, если возникнет необходимость :)

Действительно, когда будем писать свою прошивку — хорошая граф. библиотека потребуется. Уже сейчас можно насчёт Каллисто 2.0 подумать, там место свободное под графику освободится за счёт выноса всего шитого кода в область данных. Спасибо! Поддержка не помешает.