Zum Hauptinhalt springen

Color-Image-Puffer

Was dieses Beispiel zeigt​

Zeichnen Sie ein kleines Bild direkt aus einem Puffer in Ihrem Code, ohne eine Datei dekodieren zu müssen. Der Puffer enthält zwei Pixel pro Byte: Die oberen vier Bits sind der Farbindex des ersten Pixels, die unteren vier Bits der des zweiten. Das Beispiel erstellt ein Bild von 180 × 90 Pixeln mit sechs vertikalen Streifen, einen pro Farbe.

Beispielcode​

"""Draw a small pre-packed color image buffer directly onto the screen.

draw_color_image() takes a raw 4bpp buffer (2 pixels per byte, row-major, high
nibble first) instead of decoding a file -- useful for small pre-rendered
icons/patterns baked directly into your code instead of loaded from SD/web.
"""

from inkplate7spectra import Inkplate

inkplate = Inkplate()
inkplate.begin()

# Build a small pixel image cycling through all 6 available colors in vertical
# stripes, two pixels packed per byte (high nibble = first pixel, low nibble =
# second). Sized 180x90 so the stripes are clearly visible on screen.
IMG_WIDTH = 180
IMG_HEIGHT = 90
colors = [
Inkplate.BLACK,
Inkplate.WHITE,
Inkplate.YELLOW,
Inkplate.RED,
Inkplate.BLUE,
Inkplate.GREEN,
]

stripe_width = IMG_WIDTH // len(colors)
bytes_per_row = IMG_WIDTH // 2
image = bytearray(bytes_per_row * IMG_HEIGHT)
for y in range(IMG_HEIGHT):
for xb in range(bytes_per_row):
c1 = colors[min((2 * xb) // stripe_width, len(colors) - 1)]
c2 = colors[min((2 * xb + 1) // stripe_width, len(colors) - 1)]
image[y * bytes_per_row + xb] = (c1 << 4) | c2

# Draw it near the top-left corner
inkplate.draw_color_image(50, 50, IMG_WIDTH, IMG_HEIGHT, image)

inkplate.display()

Verwendete Funktionen​

Inkplate()returns Inkplate

Erstellt das Display-Objekt aus dem Modul inkplate7spectra.

ReturnsDas Display-Objekt.

inkplate.begin()returns bool

Richtet das Board und einen weißen Framebuffer ein. Rufen Sie sie nur einmal auf.

ReturnsTrue.

inkplate.draw_color_image(x, y, width, height, image)returns None

Zeichnet einen gepackten Puffer mit zwei Pixeln pro Byte, wobei die oberen vier Bits zuerst kommen, Zeile für Zeile, mit der oberen linken Ecke bei (x, y). Jeder Vier-Bit-Wert ist ein Farbindex von 0 bis 5.

ReturnsNichts.

inkplate.display(leave_on=False)returns None

Sendet den Framebuffer an das Panel und aktualisiert es.

ReturnsNichts.

Was Sie erwarten können​

Ein Block von 180 × 90 Pixeln erscheint 50 Pixel von der oberen linken Ecke entfernt. Er besteht aus sechs Streifen von je 30 Pixeln Breite: Schwarz, Weiß, Gelb, Rot, Blau und Grün. In der Shell wird nichts ausgegeben.

🔗Vollständiges Beispiel öffnen

examples/inkplate7spectra/draw_color_image.py

→