Integer Array aus File lesen

( DollaTek 1.8 Zoll Vollfarbe 128x160 SPI Vollfarbe TFT LCD Display Modul ST7735S 3.3V Ersetzen OLED-Netzteil für Arduino DIY KIT)

#define TFT_MISO  12
#define TFT_MOSI  11  //a12
#define TFT_SCK   13  //a13
#define TFT_DC   9 
#define TFT_CS   10  
#define TFT_RST  8


#include <Adafruit_GFX.h>    // Core graphics library
#include <ST7735_t3.h> // Hardware-specific library
#include <ST7789_t3.h> // Hardware-specific library

#include <SPI.h>

 
ST7735_t3 tft = ST7735_t3(TFT_CS, TFT_DC, TFT_RST);

Die ST7735_t3 musste ich für Teensy leicht modifizieren.

Dan schau dir mall die TFT_eSPI an die kann auch JPG.
Bei der Auflösung vom Display passen unzählige Bilder auf den Teenesy. wenn in JPG dann noch Minimum 1/3 Mehr.
Gehe von aus das Teenesy hat auch so was wie Virtuelle Festplatte, Bei ESP wenn unbedingt BMP angezeigt werden muss kommt das in Flasch ist schneller und ohne rumspielen mit SD usw
Wen bei mir mit ESP32 BMP Format wird angezeigt auf dem kleinem ding in 4 Millisekunden war gelogen es sind 104 Millisekunden, wird auf Teenesy auch so sein.
Die Adafruit ist die langsamste Lib was ich kenne, dazu kann nicht viel.
TFT Displays nutze nur mit ESP32 .

Ok, danke, werde ich morgen mal danach schauen.

Das halte ich für eine falsche Annahme.
JPG ist ja nur das Format, wie die Daten vielleicht auf der SD-Karte liegen. Eine Library muss JPG dann auspacken und damit braucht es dann wieder die 16 Bit pro Pixel.

Deshalb habe gefragt nach dem ob Teenesy kann was ähnliches wie FS bei ESP.
Man kann aber JPEG auch direkt in Array einlesen, was der JPG Decoder damit macht ist neben Sache, (wird in RAM einpackt zu Display gesendet, RAM freigegeben).

Wie verstanden habe habe will der TO die Grafik (Bild, Foto) im Array zwischenspeichern und danach zu Display senden damit es Schneller angezeigt wird.

Wie geschrieben habe noch nie mit Adafruit ein Foto auf irgend einem Display ausgegeben, angezeigt.
Bei LCD Wicki ist zu sehen wie Daten Tropfen zum Display, man kann zusehen wie das wird schön aufgebaut Linie zu Linie, wo möglich ist das auch der Fall bei Adafruit + SD Karte

So habe mall rumprobiert mit JPEG Foto was wurde konvertiert auf 120 x 160 Pixel.
Benutz wurde ESP32 und die TFT_eSPI. das Foto ist im SPIFFS Abgelegt.

===========================
Drawing file: /RedRose_2.jpg
===========================
===============
JPEG image info
===============
Width      :120
Height     :160
Components :1
MCU / row  :8
MCU / col  :10
Scan type  :4
MCU width  :16
MCU height :16
===============

Total render time was    : 49 ms
=====================================
Total time in millis :  104 ms
==============================


Das Display ist ein 1,8" 120 RGB x 160 mit ST7735 S.
Falls Jemand das testen will
1_8_Zoll__bild.ino (680 Bytes)
GfxUi.cpp (10.4 KB)
GfxUi.h (2.2 KB)
Beide GFX im gleichem Ordner der ino Datei speichern, werden als Tab eingebunden, der data Ordner mit dem Foto soll in SPIFS geladen werden.
data.zip (295.5 KB)

Man kann auch PROGMEM nutzen, habe gerade getestet mit meinem ESP + der kleiner Display.
So wie weiß sollte auch Teenesy das Unterstützen, somit währe Problem mit separatem Array erledigt, das macht der JPEG Decoder intern.
Die Bilder, Fotos in Tab auslagern, fertig.
Wenn gewünscht kann später was zeigen, einstellen.

Für Fotowiedergabe ist JPG natürlich eine gute Sache.
Die Bilder sind viel kleiner als BMPs.
Allerdings habe ich mit Absicht BMP gewählt.
BMP eignen sich besser für Grafiken, scharfe Ränder, klare Pixel.
BMP brauchen zwar mehr Speicherplatz, aber auf meiner SD Karte will ich
bestimmt nicht mehr als 800000 Bilder abspeichern. Und im internen Speicher
des Teensy habe ich auch genug Platz um mindestens 2 Bilder bereit zu halten.
Ich habe zumindest vor, mittels eines Drehschalters zwischen einzelnen Bildern
umzuschalten. So würde ich wahrscheinlich beim Einsatz des Drehens bereits
das übernächste Bild einladen, und das nächste Bild darstellen. Wie schnell das dann
gehen wird/muss, werde ich erst noch testen müssen.

Jetzt benötige ich erst mal eine schnelle Methode Files in Arrays zu laden.

Die hast Du doch bekommen. Nun musst Du das mal auf Deinem Teensy ausprobieren. Wie groß die Bilder sind und damit das Array wirst Du ja wissen.
Also ein paar Dateien auf die SD schreiben und einlesen.

Gruß Tommy

Du vergis nicht einz um das auf dem kleinen Display zeigen müssen all Bilder in Display Größe konvertiert werden. Versuch doch die TFT_eSPI.
Wenn die tut Dan kannst direkt von der SD Karte mit encoder einlesen.
Würde nie versuchen das erst in Arrays das schaufeln, Lib umschreiben damit das funktioniert.

Wenn er unbedingt Array will, dann soll er es doch tun.
Deine Lib scheint ihn nicht zu interessieren.

Gruß Tommy

Hast recht, nur die Zeit was er braucht aus SD Lesen, in Array setzen, Array in Grafikspeicher schieben dann sind die Bilder in gleicher zeit zu sehen, ob Er will oder nicht muss doch die Lib zu Hilfe nehmen.

?
Habe ich nicht gesagt, ich habe nur geschrieben, dass ich BMP den JPG vorziehe.

An dem mickrigen Display muss man Adlerauge haben um den unterschied zwischen den Formaten sehen.
Die TFT_eSPI kann mit BMP, PNG, und JPEG umgehen.
Habe mein Beispiel mit JPEG gezeigt den das habe mall schon für anderen Kollegen gemacht, und es war schon für den kleinen Display vorbereitet.
Aber in Endeffekt jeder macht wie er will, es waren nur Vorschläge.

Hier ist gezeigt wie die Lib Rendert PNG, es sollte Panda werden :wink: jedoch das Bild ist für 320 x 480 Display vorgesehen, ok ein wenig besser ist es, muss zugeben.
Es ist einfacher Beispiel aus der Lib, das Bild ist auch in PROGMEM, hiterlegt.

Ich bin gerade dabei die User_Setup.h anzupassen.
Beispielsweise heißen die Pins der Teensy einfach nur 9 oder 10
Im Setup wird gefordert sie PIN_Dx zu nennen. Versteht die
Lib dann auch wenn ich
#define TFT_DC PIN_09
oder
#define TFT_DC PIN_10
schreibe, oder wie soll dann die Syntax sein?

Wie hast das bei der Adafruit gemacht?

#define TFT_MISO 12 // n.c.
#define TFT_MOSI 11 // SDA = Daten
#define TFT_SCK 13 // SCL = Clock
#define TFT_DC 9 // DC =
#define TFT_CS 10 // CS = Chip Select
#define TFT_RST 8 // RST = Reset

also trag das so ein,
habe bei ESP auch so
#define TFT_CS 4 // Chip select control
#define TFT_DC 2 // Data Command control pin
#define TFT_RST 0// Reset pin (could connect to NodeMCU RST, see next line)
//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V
#define TFT_BL 15

MOSI, MISO, SCK wird aus dem Teenesy Core genommen
Wen das Standard SPI Pins sind.

1 Like

ok ich versuche es. Dauert jetzt halt wahrscheinlich etwas.