Zum Hauptinhalt springen

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​

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

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

Initialisiert die Bibliothek, die Peripherie und den Framebuffer. Rufen Sie sie einmal in setup() auf.

ReturnsNichts.

SdFile()returns None

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

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

Wä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 void

Füllt den Framebuffer mit Weiß. Das Display selbst wird dabei nicht verändert.

ReturnsNichts.

display.setCursor(int16_t x, int16_t y)returns void

Legt fest, wo der nächste ausgegebene Text beginnt.

ReturnsNichts.

display.setTextColor(uint16_t c)returns void

Legt die Textfarbe fest, hier BLACK.

ReturnsNichts.

display.setTextSize(uint8_t s)returns void

Legt die Textvergrößerung fest, hier 2.

ReturnsNichts.

display.print(value)returns size_t

Gibt Text in den Framebuffer aus, wie Serial.print().

ReturnsAnzahl der ausgegebenen Bytes.

display.println(text)returns size_t

Gibt Text in den Framebuffer aus und springt in die nächste Zeile.

ReturnsAnzahl der ausgegebenen Bytes.

display.display(bool _leaveOn = 0)returns void

Sendet den gesamten Framebuffer an das Display und aktualisiert es.

ReturnsNichts.

delay(ms)returns void

Arduino-Core-Funktion: wartet die angegebene Anzahl von Millisekunden, hier 5000.

ReturnsNichts.

display.sdCardSleep()returns void

Setzt 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

→