Bild auf TFT positionieren mit Raspberry und Python

OP #6843659
Lesenswert?

Hallo,

ich habe einen Raspberry  an dem ein 2,8" TFT über SPI angeschlossen 
ist.
Ich gebe eine Grafik mit folgendem Code aus (Ausschnitt, in Python):
1
from PIL import Image, ImageDraw, ImageFont
2
....
3
image = Image.new("RGB", (width, height))
4
draw.rectangle((0, 0, width, height), outline=0, fill=(0, 0, 0))
5
disp.image(image)
6
image = Image.open("test.jpg")
7
disp.image(image)

Das funktioniert einwandfrei. Zunächst wird das Display ein mal schwarz 
gemacht, dann die Grafik geladen und Angezeigt.

Nun mein Problem: Die Grafik wird immer links oben angezeigt (Grafik hat 
100x100 Pixel, Display hat 240x320 Pixel).
Wie kann ich die Position der Grafik bestimmen. Im nächsten Schritt 
sollen unterschiedliche Grafiken nebeneinander am unteren Displayrand 
angezeigt werden. Hierfür müsste ich die exakte Position angeben können.

Google hat "draw.bitmap" ausgespuckt.
Ich habe es folgendermaßen versucht:
1
draw.bitmap((150, 150), Image.open('test.bmp'), fill=None)

Egal was ich für "fill" eingebe, es kommt entweder Syntaxfehler oder 
"bad transparency mask". Ich habe schon RGB-Werte, RGBA-Werte, die 
Zahlen 0, 1 und 255 sowie den Wert "none" versucht, immer das gleiche. 
Wobei diese Sachen bei Beispielen die ich über Google gefunden habe 
angezeigt werden.

Wenn ich Text ausgeben will funktioniert es mit folgender Beispielzeile 
ohne Probleme. Der Text wird korrekt ausgegeben und positioniert.
1
draw.text((140, 180), text, font=font_groß, fill=(255, 255, 0))

Was mache ich falsch, oder gibt es eine bessere Methode?
Ziel ist es im unteren Displaybereich 3 Grafiken nebeneinander 
anzuzeigen. Diese Grafiken wechseln je nach Messwerte, müssen also 
variabel sein. Darüber ist ein großer Bereich vom Display für Messwerte 
vorgesehen (Textzeilen unterschiedlicher Größe).
Das mit dem Text funktioniert bereits. Ich muss nur noch die Grafiken 
einbinden können.
Gast #6845331
Lesenswert?

R. F. schrieb:
> Nun mein Problem: Die Grafik wird immer links oben angezeigt (Grafik hat
> 100x100 Pixel, Display hat 240x320 Pixel).
> Wie kann ich die Position der Grafik bestimmen. Im nächsten Schritt
> sollen unterschiedliche Grafiken nebeneinander am unteren Displayrand
> angezeigt werden. Hierfür müsste ich die exakte Position angeben können.

Ich bin kein PIL Experte aber, wie wäre es, wenn du erstmal versuchst 
dein 100×100 Bild zentriert anzeigen zu lassen. Google hat da folgenden 
Code ausgespuckt. Mit dem überlasse ich dir, das ganze dann deinen Fall 
zu anzupassen.
1
with Image.open('test.jpg') as im:
2
    background = Image.new("RGB", (width, height))
3
    bg_w, bg_h = background.size
4
    img_w, img_h = im.size
5

6
    offset = ((bg_w - img_w) // 2, (bg_h - img_h) // 2)
7
    background.paste(im, offset)
8
    background.show()

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren