Dither-Kernel
Was dieses Beispiel zeigt
Zeichnen Sie dasselbe Bild von der microSD-Karte nacheinander mit jedem der sieben Dithering-Kernel, die die Bibliothek bietet, und vergleichen Sie sie. Ein Kernel bestimmt, wie der Fehler, der beim Reduzieren des Bildes auf die sechs Farben des Displays entsteht, auf benachbarte Pixel verteilt wird; die Kernel unterscheiden sich in Schärfe, Rauschen und Geschwindigkeit. Der Bildschirm zeigt den Namen des Kernels über dem Bild und wird einmal pro Kernel aktualisiert, im Abstand von fünf Sekunden.
Sie benötigen eine mit FAT oder FAT32 formatierte microSD-Karte mit einer Datei namens picture1.jpg, die in Inkplate eingesetzt ist.
Beispielcode
#include "Inkplate.h"
Inkplate display;
SdFile file;
ImageColor::DitherKernel kernels[] = {
ImageColor::FloydSteinberg, ImageColor::JarvisJudiceNinke, ImageColor::Atkinson, ImageColor::Burkes,
ImageColor::Stucki, ImageColor::SierraLite, ImageColor::ReducedDiffusion,
};
const char *kernelNames[] = {
"Floyd-Steinberg", "Jarvis-Judice-Ninke", "Atkinson", "Burkes", "Stucki", "Sierra Lite", "Reduced Diffusion",
};
const uint8_t kernelCount = sizeof(kernels) / sizeof(kernels[0]);
void setup()
{
display.begin();
if (!display.sdCardInit())
{
display.println("SD card error!");
display.display();
return;
}
for (uint8_t i = 0; i < kernelCount; i++)
{
display.clearDisplay();
display.setCursor(0, 0);
display.setTextColor(BLACK);
display.setTextSize(2);
display.print("Kernel: ");
display.println(kernelNames[i]);
// Select the kernel used for all subsequent dithered draws
display.image.setDitherKernel(kernels[i]);
if (!display.image.draw("picture1.jpg", 0, 30, true))
{
display.println("Image open error");
}
display.display();
delay(5000);
}
display.sdCardSleep();
}
void loop()
{
// Nothing...
}
Verwendete Funktionen
Inkplate()returns NoneErstellt das Inkplate-Objekt. Inkplate 7SPECTRA hat nur einen einzigen Sechs-Farben-Modus, daher erwartet der Konstruktor kein Modus-Argument.
ReturnsKonstruktor; kein Rückgabewert.
display.begin()returns voidInitialisiert die Bibliothek, die Peripherie und den Framebuffer. Rufen Sie sie einmal in setup() auf.
ReturnsNichts.
SdFile()returns NoneSdFat-Klasse, die mit der Inkplate-Bibliothek mitgeliefert wird: ein Dateiobjekt auf der microSD-Karte. Der Sketch erstellt eines als `file` und verwendet es nicht weiter.
ReturnsKonstruktor; kein Rückgabewert.
display.sdCardInit()returns int16_tSchaltet die Spannungsversorgung der microSD-Karte ein, startet deren SPI-Bus und bindet die Karte ein.
Returns1, wenn die Karte initialisiert wurde, 0, wenn dies fehlgeschlagen ist.
display.image.setDitherKernel(const DitherKernel kernel)returns voidWählt den Fehlerdiffusions-Kernel, der für danach ausgeführte Dithering-Zeichenvorgänge verwendet wird. Die Kernel sind ImageColor::FloydSteinberg (Standard), ImageColor::JarvisJudiceNinke, ImageColor::Atkinson, ImageColor::Burkes, ImageColor::Stucki, ImageColor::SierraLite und ImageColor::ReducedDiffusion.
ReturnsNichts.
display.image.draw(const char *path, int x, int y, bool dither = 1, bool invert = 0)returns boolÖffnet eine Bilddatei auf der microSD-Karte anhand ihres Namens und zeichnet sie mit ihrer oberen linken Ecke bei (x, y) in den Framebuffer. Der Sketch zeichnet picture1.jpg bei (0, 30) mit aktiviertem Dithering.
Returnstrue, wenn das Bild gezeichnet wurde, false, wenn die Datei nicht geöffnet oder nicht dekodiert werden konnte.
display.clearDisplay()returns voidFüllt den Framebuffer mit Weiß. Das Display selbst wird dabei nicht verändert.
ReturnsNichts.
display.setCursor(int16_t x, int16_t y)returns voidLegt fest, wo der nächste ausgegebene Text beginnt.
ReturnsNichts.
display.setTextColor(uint16_t c)returns voidLegt die Textfarbe fest, hier BLACK.
ReturnsNichts.
display.setTextSize(uint8_t s)returns voidLegt die Textvergrößerung fest, hier 2.
ReturnsNichts.
display.print(value)returns size_tGibt Text in den Framebuffer aus, wie Serial.print().
ReturnsAnzahl der ausgegebenen Bytes.
display.println(text)returns size_tGibt Text in den Framebuffer aus und springt in die nächste Zeile.
ReturnsAnzahl der ausgegebenen Bytes.
display.display(bool _leaveOn = 0)returns voidSendet den gesamten Framebuffer an das Display und aktualisiert es.
ReturnsNichts.
delay(ms)returns voidArduino-Core-Funktion: wartet die angegebene Anzahl von Millisekunden, hier 5000.
ReturnsNichts.
display.sdCardSleep()returns voidSetzt die SPI-Pins der Karte auf Eingänge und schaltet die Versorgung der Karte ab, um im Deep Sleep Strom zu sparen.
ReturnsNichts.
Was Sie erwarten können
Der Bildschirm zeigt Kernel: Floyd-Steinberg über picture1.jpg. Alle fünf Sekunden wird er mit dem Namen des nächsten Kernels und demselben Bild aktualisiert, in dieser Reihenfolge: Floyd-Steinberg, Jarvis-Judice-Ninke, Atkinson, Burkes, Stucki, Sierra Lite, Reduced Diffusion. Nach dem letzten wird die Karte ausgeschaltet, und das letzte Bild bleibt auf dem Bildschirm stehen.
Wenn die Karte nicht gestartet werden kann, zeigt der Bildschirm SD card error!; wenn das Bild nicht geöffnet werden kann, erscheint Image open error unter dem Namen des Kernels. Der Sketch gibt nichts im Serial Monitor aus.
🔗Vollständiges Beispiel öffnen
examples/Inkplate7SPECTRA/Advanced/Other/Inkplate7SPECTRA_Dither_Kernels