Skip to main content

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​

Select Board
Inkplate7SPECTRA_PNG_From_Buffer.ino
#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 None

Stvara 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 void

Inicijalizira biblioteku, periferiju i međuspremnik slike. Pozovite je jednom u setup().

ReturnsNišta.

display.clearDisplay()returns void

Ispunjava međuspremnik slike bijelom bojom. Ne mijenja panel.

ReturnsNišta.

display.setTextColor(uint16_t c)returns void

Postavlja boju teksta koja se koristi za poruke o pogreškama, ovdje BLACK.

ReturnsNišta.

display.setTextSize(uint8_t s)returns void

Postavlja povećanje teksta, ovdje 1.

ReturnsNišta.

display.sdCardInit()returns int16_t

Uključuje napajanje microSD kartice, pokreće njezinu SPI sabirnicu i montira karticu.

Returns1 ako je kartica inicijalizirana, 0 ako nije uspjelo.

SdFile()returns None

SdFat 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 bool

SdFat 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_t

SdFat 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 int

SdFat funkcija: čita do count bajtova iz datoteke u međuspremnik. Skica čita cijelu datoteku.

ReturnsBroj pročitanih bajtova.

file.close()returns bool

SdFat 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 bool

Dekodira 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 void

Postavlja SPI pinove kartice kao ulaze i isključuje napajanje kartice radi uštede energije u dubokom snu.

ReturnsNišta.

display.println(text)returns size_t

Ispisuje 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

→