320x480 TFT Grafik Display

Hallo in die Runde,
für ein Projekt müsste ich 15 Bilder im png Format mit Alphakanal (also transparenten Stellen) übereinander legen. Das resultierende Bild soll den Zustand von 14 Regionen mit jeweils 5 verschiedenen Farben darstellen und nach einer Information, die aus dem Internet bezogen wird, unterschiedlich zusammengesetzt werden. Ich hoffen, ich habe mich verständlich ausgedrückt.
Geht das mit der Arduino IDE? Welche Library ist dafür am besten geeignet? Das Display hat einen ILI9488 Controller.
Gruß Hans

Die Frage ist vermutlich eher, welche Hardware, die mit der Arduino-IDE programmiert werden kann, dafür geeignet ist, da ja doch etwas mehr Speicher benötigt wird. PNG ist komprimiert und muß im Speicher vermutlich unkomprimiert abgelegt werden. Das sind ca. 230 kB je Bild, wenn ich vom BMP-Format ausgehe.

Eine Bibliothek, die direkt PNG verarbeitet, habe ich noch nicht verwendet, aber der Bibliotheksverwalter bietet zwei an. Da findest Du auch die Hardwareanforderungen.

BMP kann die Adafruit_GFX_Library anzeigen.

Deine Frage kann ich also mit "vermutlich Ja" beantworten.

Danke für den Hinweis. Ich habe mit dem Autor der beiden Libraries (Larry Bank) Kontakt aufgenommen und dieser sagt auch, dass es geht. Als Board will ich ein D1 Mini Pro verwenden weil das 16MB Speicher hat. Larry sagt, dass seine Library PNGdec standard PNGs in Pixel zerlegen kann solange sie nicht interlaced sind. Man müsse dann "nur noch" die transparenten Pixel mit den nicht-transparenten mergen und hier stehe ich wieder auf dem Schlauch. Ich habe keine Ahnung, wie ich das anstellen soll. Hat jemand ein Beispiel für mich?

In Corel Photo-Paint habe ich einen Vordergrund- und Hintergrundlayer. Die durchsichtigen Pixel im Vordergund werden durch diejenigen des Hintergrundes ersetzt. Sowas möchtest Du wohl in C++ implementieren.

Genau.

Schmeiß doch mal zwei Beispieldateien in die Runde zum Probieren.

Ich versuche mal, ob das so klappt mit dem Reinschmeißen...


Bei den Dokumenteigenschaften sehe ich:

grafik

  1. Die Pixelzahl 1719x1721 paßt nicht zum Display, müßte reduziert werden.
  2. Der Speicher ist für mindestens zweimal 36,4 MB viel zu klein.
  3. Können die Bibliotheken von Larry Bank auch LZ77-Komprimierung?

Mein Gefühl sagt mir, Du solltest mal schauen, ob das mit einem RasPi nicht eventuell einfacher geht.

Dann sind es noch 60kB und es wird etwas pixelig, besonders in der Schrift:
Barnim

Dann stimmen Deine Erwartungen nicht mit den Möglichkeiten Deines Displays überein. Oder?

Richtig, die Bilder müssen noch an das Display angepasst werden. Ich habe erst mal nur darauf geachtet, dass ich alle gleich (bis auf die Farben) bekomme. Ich muss noch die Schrift entfernen (transparent machen) und die Bilder runterskalieren. Die Schrift soll dann auf einen extra Layer.

Für mein 128x160 Display habe ich Dein 320x480 Bild beschnitten. Das kann man auf dem Display anzeigen, bleibt aber natürlich pixelig:

Verwendet: ESP32 mit png-Datei im SPIFFS, 1,8" TFT 128x160.

Sieht das bei Dir besser aus?

Falls Du mich meinst (was ich eher nicht annehme):
Nein, ich hatte dieses Bild nie auf einem kleinen Display, habe es nur mal testweise verkleinert um die Zielgröße in PNG rauszubekommen. Es entspricht aber meinen Erwartungen.

Bei dieser Art Darstellungen - ist ja immer dieselbe Basiszeichnung nur mit jeweils verschiedener Einfärbung - würde ich

  1. auf jeden Fall die Texte rausnehmen und mit einem geeigneten Font schreiben (kann man ja schön zusammen mit den Koordinaten in einen Array aus Strukturen packen)
  2. mindestens das Bild im PC schon auf die Zielauflösung rechnen
  3. vielleicht überlegen, es aus Polygonzügen zu malen (falls die Grenzen als Vektoren vorliegen oder eine Vektorisierung möglich ist)

Gruß Walter

Eigentlich nicht. Aber nett, daß ich nicht alleine bin :slightly_smiling_face:

Wenn ich auf einen weißen Hintergrund drei png-Dateien von hinten nach vorne zum Display schicke, geht das Zusammenmischen ganz von alleine.

Danke für die Anregungen. Ich denke, ich werde jetzt mal Folgendes machen:

  1. Die Originalvorlage ist eine Vektorgrafik. Die werde ich im ersten Schritt mal so skalieren, wie das für mein Display erforderlich ist.
  2. Das Ergebnis wandele ich in ein PNG um.
  3. In diesem PNG werde ich alle Anteile, die nachher unsichtbar sein sollen, transparent machen, also auch die Schrift.
  4. Dieses Ergebnis wiederum nehme ich als Vorlage für die Einfärbungen, das ergibt dann 70 PNGs mit der korrekten Auflösung.
  5. Zusätzlich machen ich noch ein PNG, das nur die Schrift enthält, ansonsten aber transparent ist.

Habe ich einen Zwischenschritt vergessen? Ist die Vorgehensweise so korrekt?

Es kann ein wenig dauern, bis ich mich dann hier wieder melde, weil ich momentan noch ein paar andere Dinge erledigen muss und weil mir die Grafikarbeiten nicht so schnell von der Hand gehen.

Gruß
Hans

Hört sich so an als könnte es gehen.

Ich sehe eine Einschränkung:
Entfernen der Einfärbung erfordert wieder das Darstellen des ungefärbten Originals auf dem Hintergrund (Entfärben) und dann neu darüber wieder das ganze Bild wo dann ein anderer Kreis eingefärbt ist - + Schrift. Das wird vielleicht flackern.

Um Speicher zu sparen und das Zeichnen zu beschleunigen wäre evtl. eine Aufteilung in einzelne Bilder hilfreich (Bounding Rectangle um die Landkreise). Wenn Du von Prignitz nach Elbe-Elster springst, bleibt der Rest ja unverändert.

Zu den Texten (Nr. 5) hatte ich ja schon geschwafelt - aber natürlich geht das auch mit PNG.

Ich würde so lange wie möglich bei Vektor bleiben.

Da würde ich vor der vielen Arbeit erstmal einen Test machen, ob das Endergebnis überhaupt eine sinnvolle Qualität liefert. Ich bin da etwas skeptisch.

Die von mir verwendete Bibliothek möchte 16 BPP, mein Grafikprogramm liefert 24 BPP, vermutlich deshalb gibt es Farbabweichungen.

Momentan komme ich nicht dazu, an diesem Projekt weiter zu machen, dazu werde ich frühestens im Januar 2022 Zeit finden. Ich bleibe aber am Ball und melde mich dann.

Danke für's "Lebenszeichen", genieße, wenn möglich, die Feiertage :santa: