Графическая библиотека для калькуляторов CASIO
Данная библиотека пригодится не только для калькулятора CASIO 9860, но и для любого другого, поддерживающего программирование на языке Си.
Сайт проекта на GitHub: 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;
}
Данный код рисует такую картинку:
Как видите все действительно просто!
Если сообщество будет заинтересовано данной библиотекой, то я сделаю цикл статей о работе с ней. Пишите комментарии и описания ошибок в трекер проекта.
blog comments powered by Disqus