Библиотека Adafruit GFX drawBitmap без PROGMEM

Поэтому я пытаюсь поместить байтовый массив изображения во внешний eeprom (c24LC16B) и использовать функцию drawBitmap () в библиотеке Adafruit GFX, чтобы нарисовать его на ЖК-дисплее Nokia 3310 (с библиотекой Adafruit PCD8544). Но проблема в том, что drawBitmap () может использовать только статический байтовый массив PROGMEM. Это плохо, мне нужно прочитать массив img из eeprom в буфер (byte buf [504] {};) и затем нарисовать его на дисплее.

Я попробовал некоторые модификации, которые я нашел в Интернете, например, добавить это в Adafruit_GFX.ccp:

void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
uint8_t *bitmap, int16_t w, int16_t h,
uint16_t color) {

int16_t i, j, byteWidth = (w + 7) / 8;

for(j=0; j<h; j++) {
for(i=0; i<w; i++ ) {
if(bitRead(bitmap[j], 7-i))
drawPixel(x+i, y+j, color);
}
}
}

но это все еще только мусор

Так почему же так много с PROGMEM и обычными массивами? Разве байты от PROGMEM и от SRAM не совпадают?
Также извините за мою грамматику.

1

Решение

я это сделал !
Все, что мне нужно сделать, это написать свою собственную функцию! = D

просто добавьте это в Adafruit_GFX.ccp

void Adafruit_GFX::drawRamBitmap(int pozXi, int pozYi, int h, int w, byte color, byte bg, byte bitmap[], int mapSize) {
int pozX = pozXi;
int pozY = pozYi;

for (int x = 0; x < mapSize; x++) {
for (byte y = 0; y < 8; y++) {
byte dummy = bitmap[x] << y;
if (dummy >= 128) {
drawPixel(pozX, pozY, color);
}
else {
drawPixel(pozX, pozY, bg);
}
pozX++;
if (pozX == w + pozXi) {
pozX = pozXi;
pozY++;
}
}
}
}

void Adafruit_GFX::drawRamBitmap(int pozXi, int pozYi, int h, int w, byte color, byte bitmap[], int mapSize) {
int pozX = pozXi;
int pozY = pozYi;

for (int x = 0; x < mapSize; x++) {
for (byte y = 0; y < 8; y++) {
byte dummy = bitmap[x] << y;
if (dummy >= 128) {
drawPixel(pozX, pozY, color);
}
pozX++;
if (pozX == w + pozXi) {
pozX = pozXi;
pozY++;
}
}
}
}

и это для Adafruit_GFX.h

drawRamBitmap(int pozXi, int pozYi, int h, int w, byte color, byte bg, byte bitmap[], int mapSize),
drawRamBitmap(int pozXi, int pozYi, int h, int w, byte color, byte bitmap[], int mapSize),

использование:

drawRambitmap(x,y,h,w,color,byte_array_of_img, size_of_array);

или же

drawRambitmap(x,y,h,w,color,background_color,byte_array_of_img, size_of_array);
1

Другие решения


По вопросам рекламы [email protected]