PNG iz međuspremnika
Što ovaj primjer prikazuje
Učitajte PNG datoteku s microSD kartice u međuspremnik u RAM-u, a zatim je nacrtajte iz tog međuspremnika. Isti postupak vrijedi za PNG podatke koji stižu iz bilo kojeg drugog izvora, primjerice preko mrežne veze ili serijskog prijenosa, jer funkcija za crtanje prima memorijski međuspremnik, a ne datoteku.
Potrebna vam je microSD kartica formatirana kao FAT ili FAT32 s datotekom naziva image.png, umetnuta u Inkplate. Komentari u skici navode da PNG ne smije biti veći od 800 x 480 piksela te da se cijela datoteka prvo učitava u heap memoriju, pa mora stati u slobodni RAM (oko 300 KB na ESP32).
Primjer koda
#include "Inkplate.h"
Inkplate display;
void setup()
{
display.begin();
display.clearDisplay();
display.setTextColor(BLACK);
display.setTextSize(1);
if (!display.sdCardInit())
{
display.println("SD card error!");
display.display();
return;
}
SdFile file;
if (!file.open("image.png", O_RDONLY))
{
display.println("Cannot open image.png");
display.display();
display.sdCardSleep();
return;
}
uint32_t fileSize = file.fileSize();
// Allocate a buffer large enough for the whole file
uint8_t *buf = (uint8_t *)malloc(fileSize);
if (!buf)
{
display.println("Not enough RAM for image buffer!");
display.display();
file.close();
display.sdCardSleep();
return;
}
// Read the entire file into the buffer
file.read(buf, fileSize);
file.close();
display.sdCardSleep();
// Draw the PNG from the in-memory buffer
if (!display.image.drawPngFromBuffer(buf, fileSize, 0, 0, true, false))
{
display.println("PNG decode error");
}
free(buf);
display.display();
}
void loop()
{
// Nothing...
}
Korištene funkcije
Inkplate()returns NoneStvara Inkplate objekt. Inkplate 7SPECTRA ima samo jedan šestobojni način rada, pa konstruktor ne prima argument načina rada.
ReturnsKonstruktor; nema povratne vrijednosti.
display.begin()returns voidInicijalizira biblioteku, periferiju i međuspremnik slike. Pozovite je jednom u setup().
ReturnsNišta.
display.clearDisplay()returns voidIspunjava međuspremnik slike bijelom bojom. Ne mijenja panel.
ReturnsNišta.
display.setTextColor(uint16_t c)returns voidPostavlja boju teksta koja se koristi za poruke o pogreškama, ovdje BLACK.
ReturnsNišta.
display.setTextSize(uint8_t s)returns voidPostavlja povećanje teksta, ovdje 1.
ReturnsNišta.
display.sdCardInit()returns int16_tUključuje napajanje microSD kartice, pokreće njezinu SPI sabirnicu i montira karticu.
Returns1 ako je kartica inicijalizirana, 0 ako nije uspjelo.
SdFile()returns NoneSdFat klasa, isporučena s bibliotekom Inkplate: objekt datoteke na microSD kartici. Skica ga stvara kao `file`.
ReturnsKonstruktor; nema povratne vrijednosti.
file.open(path, mode)returns boolSdFat funkcija, isporučena s bibliotekom Inkplate: otvara datoteku na kartici. Skica prosljeđuje O_RDONLY kako bi je otvorila za čitanje.
Returnstrue ako je datoteka otvorena.
file.fileSize()returns uint32_tSdFat funkcija: vraća veličinu otvorene datoteke u bajtovima. Skica alocira međuspremnik te veličine.
ReturnsVeličina datoteke u bajtovima.
file.read(void *buf, size_t count)returns intSdFat funkcija: čita do count bajtova iz datoteke u međuspremnik. Skica čita cijelu datoteku.
ReturnsBroj pročitanih bajtova.
file.close()returns boolSdFat funkcija: zatvara datoteku.
Returnstrue u slučaju uspjeha.
malloc(size_t size) and free(void *ptr)returns void *Funkcije standardne biblioteke jezika C: alociraju međuspremnik iz heap memorije i oslobađaju ga nakon što je slika nacrtana. Ako malloc ne vrati ništa, skica prikazuje Not enough RAM for image buffer!.
Returnsmalloc vraća međuspremnik, ili NULL kada nema dovoljno memorije; free ne vraća ništa.
display.image.drawPngFromBuffer(uint8_t *buf, int32_t len, int x, int y, bool dither = 0, bool invert = 0)returns boolDekodira PNG u memoriji i crta ga u međuspremnik slike tako da mu je gornji lijevi kut na (x, y). Skica prosljeđuje međuspremnik i njegovu veličinu, položaj (0, 0), dithering uključen i invert isključen. Boje se preslikavaju na šest boja panela.
Returnstrue ako je slika nacrtana, false ako se nije mogla dekodirati.
display.sdCardSleep()returns voidPostavlja SPI pinove kartice kao ulaze i isključuje napajanje kartice radi uštede energije u dubokom snu.
ReturnsNišta.
display.println(text)returns size_tIspisuje tekst u međuspremnik slike i prelazi u sljedeći redak. Skica ga koristi za poruke o pogreškama.
ReturnsBroj ispisanih bajtova.
display.display(bool _leaveOn = 0)returns voidŠalje cijeli međuspremnik slike na panel i osvježava ga.
ReturnsNišta.
Što očekivati
PNG s kartice prikazuje se na zaslonu, s dithering obradom na šest boja panela. Skica ne ispisuje ništa u Serial Monitor. Problemi se umjesto toga prikazuju na zaslonu: SD card error!, Cannot open image.png, Not enough RAM for image buffer! ili PNG decode error.
🔗Otvorite cijeli primjer
examples/Inkplate7SPECTRA/Advanced/Other/Inkplate7SPECTRA_PNG_From_Buffer