GyverLibs / GyverOLED

Лёгкая и быстрая библиотека для OLED дисплея
MIT License
123 stars 20 forks source link

Проблема с отрисовкой rect с параметром OLED_FILL #49

Closed Tlinmo closed 2 months ago

Tlinmo commented 3 months ago

В общем функция oled.rect с параметром OLED_FILL рисует прямоугольник с бОльшей стороной x на 1. Ничего бы не сказал, если бы это была именно фича этого метода, но он используется в других методах этого класса и, к сожалению, ломает их (как пример - метод oled.roundRect с параметром OLED_FILL рисует прямоугольник с кривой правой стороной).

Пример отрисовки image

Код для отрисовки этого примера


#include <GyverOLED.h>
GyverOLED<SSD1306_128x64, OLED_BUFFER> oled;
void setup() {
oled.init();
oled.clear();
oled.update();

oled.rect(0, 0, 6, 6, OLED_FILL); oled.rect(0, 8, 6, 14, OLED_STROKE);

oled.roundRect(0, 16, 6, 22, OLED_FILL); oled.roundRect(0, 24, 6, 30, OLED_STROKE);

oled.update(); }

void loop() { }


> Пояснения на всякий для случая с roundRect
![image](https://github.com/user-attachments/assets/7b1d1e51-19f0-471f-838b-cd16a049068e)

Дополнительно хотелось бы узнать: как без костылей инвертировать часть буфера дисплея? Имею ввиду то, что в других библиотеках есть флаг отрисовки BLACK, WHITE и INVERT, т.е. можно нарисовать тот же самый прямоугольник с параметром INVERT и он инвертирует нарисованную область. Просто в данной библиотеке я такого не нашел. Заранее спасибо
BocmenDen commented 2 months ago

Более 5 месяцев назад я тоже заметил что квадраты не корректно отрисовываются при написании ЛР "Игра в змейку". Результат исправления доступен в симуляторе wokwi

Проблема 1 - неправильная отрисовка прямоугольника

Данную строчку я закоментировал т.к. ниже в цикле итерирование идет включительно (<=) и поэтому инкрементирование избыточно.

Проблема 2 - похожа на предыдущию только связана с методом update

Здесь в цикле граница учтена, а тут забыта.