gpt4 book ai didi

c++ - 没有 PROGMEM 的 Adafruit gfx 库 drawBitmap

转载 作者:行者123 更新时间:2023-11-30 05:39:21 26 4
gpt4 key购买 nike

所以我试图将图像的字节数组放入外部 eeprom (c24LC16B) 并使用 Adafruit gfx 库中的 drawBitmap() 函数在 Nokia 3310 LCD(带有 Adafruit PCD8544 库)上绘制它。但问题是,drawBitmap() 只能使用静态字节 PROGMEM 数组。使用不好,我需要从 eeprom 读取 img 数组到缓冲区(字节 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 的字节不一样吗?也为我的语法感到抱歉。

最佳答案

我做到了!我所要做的就是编写自己的函数! =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);

关于c++ - 没有 PROGMEM 的 Adafruit gfx 库 drawBitmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32417848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com