跳转至

显示屏 — 图片

M5GFX 源码: lgfx/v1/LGFXBase.hpp
返回: 显示屏概览

从内存缓冲区或 SD 卡加载并显示位图、BMP、JPEG 和 PNG 图片。


drawBitmap() — 1 位位图

void drawBitmap(int32_t x, int32_t y, const uint8_t* bitmap,
                int32_t w, int32_t h, uint16_t color);

void drawBitmap(int32_t x, int32_t y, const uint8_t* bitmap,
                int32_t w, int32_t h, uint16_t fg, uint16_t bg);

绘制 1 位每像素位图。每个 bit 代表一个像素。

参数 类型 说明
x, y int32_t 左上角位置
bitmap const uint8_t* 位图数据(1bpp)
w, h int32_t 宽高(像素)
color / fg uint16_t 置位像素的前景色
bg uint16_t 清零像素的背景色
// 8x8 心形图标(1bpp)
static const uint8_t heart[8] = {
    0b00000000,
    0b01100110,
    0b11111111,
    0b11111111,
    0b01111110,
    0b00111100,
    0b00011000,
    0b00000000
};
M5Cardputer.Display.drawBitmap(10, 10, heart, 8, 8, TFT_RED);

pushImage() — 原始像素数组

void pushImage(int32_t x, int32_t y, int32_t w, int32_t h, const uint16_t* data);
void pushImage(int32_t x, int32_t y, int32_t w, int32_t h, const uint16_t* data, uint16_t transparent);

将原始 16 位 RGB565 像素数组传送到显示屏。透明色变体跳过匹配 transparent 的像素。

参数 类型 说明
x, y int32_t 左上角位置
w, h int32_t 图片尺寸
data const uint16_t* RGB565 像素数组(行主序)
transparent uint16_t 视为透明的颜色
// 16x16 精灵图(RGB565,行主序)
static const uint16_t sprite[] = {
    0x0000, 0x0000, 0xF800, 0xF800, ...
    // ... 16 行,每行 16 个像素
};
M5Cardputer.Display.pushImage(50, 50, 16, 16, sprite);

// 带透明色(TFT_BLACK 像素不可见)
M5Cardputer.Display.pushImage(50, 50, 16, 16, sprite, TFT_BLACK);

drawBmp() — 从内存绘制 BMP

bool drawBmp(const uint8_t* data, uint32_t len,
             int32_t x = 0, int32_t y = 0,
             int32_t maxWidth = 0, int32_t maxHeight = 0,
             int32_t offX = 0, int32_t offY = 0,
             float scaleX = 1.0f, float scaleY = 0.0f);

从内存缓冲区绘制 BMP 图片。

参数 类型 默认 说明
data const uint8_t* 内存中的 BMP 数据
len uint32_t 数据长度(字节)
x, y int32_t 0 左上角位置
maxWidth int32_t 0 最大输出宽度(0 = 实际)
maxHeight int32_t 0 最大输出高度(0 = 实际)
offX, offY int32_t 0 源图裁剪偏移
scaleX float 1.0 水平缩放
scaleY float 0.0 垂直缩放(0 = 同 scaleX)

成功返回 true

// 嵌入的 BMP 数据
extern const uint8_t logo_bmp[] asm("_binary_logo_bmp_start");
M5Cardputer.Display.drawBmp(logo_bmp, 0, 10, 10);

drawBmpFile() — 从 SD 卡绘制 BMP

bool drawBmpFile(const char* path,
                 int32_t x = 0, int32_t y = 0,
                 int32_t maxWidth = 0, int32_t maxHeight = 0,
                 int32_t offX = 0, int32_t offY = 0,
                 float scaleX = 1.0f, float scaleY = 0.0f);

从 SD 卡绘制 BMP 文件。参数同 drawBmp()

M5Cardputer.Display.drawBmpFile("/logo.bmp", 10, 10);
M5Cardputer.Display.drawBmpFile("/icon.bmp", 0, 0, 64, 64);  // 缩放至 64x64

drawJpg() / drawJpgFile() — 从内存 / SD 卡绘制 JPEG

bool drawJpg(const uint8_t* data, uint32_t len,
             int32_t x = 0, int32_t y = 0,
             int32_t maxWidth = 0, int32_t maxHeight = 0,
             int32_t offX = 0, int32_t offY = 0,
             float scaleX = 1.0f, float scaleY = 0.0f);

bool drawJpgFile(const char* path,
                 int32_t x = 0, int32_t y = 0,
                 int32_t maxWidth = 0, int32_t maxHeight = 0,
                 int32_t offX = 0, int32_t offY = 0,
                 float scaleX = 1.0f, float scaleY = 0.0f);

解码并绘制 JPEG 图片。参数同 drawBmp()

// 从 SD 卡绘制全屏 JPEG 背景
M5Cardputer.Display.drawJpgFile("/bg.jpg", 0, 0, 320, 240);

// 64x64 缩略图
M5Cardputer.Display.drawJpgFile("/photo.jpg", 10, 10, 64, 64);

drawPng() / drawPngFile() — 从内存 / SD 卡绘制 PNG

bool drawPng(const uint8_t* data, uint32_t len,
             int32_t x = 0, int32_t y = 0,
             int32_t maxWidth = 0, int32_t maxHeight = 0,
             int32_t offX = 0, int32_t offY = 0,
             float scaleX = 1.0f, float scaleY = 0.0f);

bool drawPngFile(const char* path,
                 int32_t x = 0, int32_t y = 0,
                 int32_t maxWidth = 0, int32_t maxHeight = 0,
                 int32_t offX = 0, int32_t offY = 0,
                 float scaleX = 1.0f, float scaleY = 0.0f);

解码并绘制 PNG 图片(支持透明度)。参数同 drawBmp()

// 带透明背景的 PNG
M5Cardputer.Display.fillScreen(TFT_BLACK);
M5Cardputer.Display.drawPngFile("/icon.png", 100, 50);

// 缩放的 PNG
M5Cardputer.Display.drawPngFile("/logo.png", 0, 0, 128, 128);

完整示例:图片画廊

#include <SD.h>
#include <SPI.h>

void initSD() {
    SPI.begin(40, 39, 14, 12);
    SD.begin(12, SPI, 25000000);
}

void drawAllImages() {
    auto& d = M5Cardputer.Display;
    d.fillScreen(TFT_BLACK);

    // JPEG 背景
    d.drawJpgFile("/bg.jpg", 0, 0, 320, 240);
    delay(1000);

    // BMP Logo
    d.fillScreen(TFT_BLACK);
    d.drawBmpFile("/logo.bmp", 50, 50);
    delay(1000);

    // 带透明度的 PNG 图标
    d.fillScreen(TFT_NAVY);
    d.drawPngFile("/icon.png", 128, 80);
}