hallo
ich nutze ein adafruit display 2,8" mit ili9341 controller (240 x 320).
ich habe mir grafiken erstellt in einer pixelgröße von 115 x 160. da ich
allerdings 16 verschiedene bilder benötige, reicht der speicher einfach
nicht aus.
Welche Möglichkeiten fallen euch da ein, um dieses Problem zu umgehen??
Würde mich sehr über hilfreiche tipps freuen.
Aus diesem Grund haben so viele LCD-Breakouts Slots für SD-Karten.
Entweder Du strickst einen externen Speicher an den Prozessor den Du
benutzt oder Du wechselst auf einen Prozessor mit mehr Speicher.
Oder Du baust eine Kompression ein. Um welche Graphiken handelt es sich?
Übrigens wäre die Angabe des Controllers und seiner Speichergröße bei
Deiner Frage hilfreich.
gruß, Stefan
Stefan K. schrieb:> Oder Du baust eine Kompression ein. Um welche Graphiken handelt es sich?> Übrigens wäre die Angabe des Controllers und seiner Speichergröße bei> Deiner Frage hilfreich.
es handelt sich um statische bilder, die ich bereits in monochrom
bitmaps umgewandelt habe.
controller ist: AT90CAN128 (128k Flash, 4k SRAM, 4k EEPROM)
eine konvertierte grafik (in die c.datei) hat im moment 188 kb :D
peter schrieb:> ein adafruit display 2,8" mit ili9341 controller
Das müsste ja bereits einen SD-SLot mit drauf haben....
.... das wäre dann schon die halbe Miete. Die andere Hälfte
ist dann ein existierendes Filesystem auf deinen Controller
anzupassen. Dann kannst du mit SD-Karten jonglieren ....
Schwarz-weiss oder Graustufen?
Bei Schwarz-weiss bekommst Du 2300 byte pro Bild, das sollte locker
reinpassen.
Bei Graustufen kannst Du ev. eine Verschlüsselung verwenden. wenn es
sich um Graphiken oder technische Darstellungen handelt, dann kann das
mit wenig Aufwand sehr effektiv sein (z.B. Run-length-Kodierung:
https://de.wikipedia.org/wiki/Laufl%C3%A4ngenkodierung).
Bei Graustufenbildern wird es schon schwieriger.
Gruß, Stefan
peter schrieb:> es handelt sich um statische bilder, die ich bereits in monochrom> bitmaps umgewandelt habe.> eine konvertierte grafik (in die c.datei) hat im moment 188 kb :D
Was genau hat 188kb? Die Daten, die die c-Datei beschreibt oder ist das
die Größe der c-Datei?
Eine Monochrom-Graphik mit 115*160 8bit Graustufenpixel hat 18400 Byte.
Selbst ein RGB-Bild kommt unkomprimiert "nur" auf 55,2kbyte.
wie kommst auf die 2300 byte?
das fertige bitmap hat 11 KB
ja ich habe einen sd slot. wollte es aber zunächst ohne lösen.
RLE methode sieht gar nicht schlecht aus
Die Frage, die sich mir stellt ist:
ok, ich könnte die bitmaps auf einer sd karte speichern. was mir aber
den platz raubt, sind ja die generierten c-dateien (188 kb / datei).
da bringt mir die sd karte ja nicht so viel
???
Die c-Dateien liegen normalerweise auf Deinem PC und nicht auf dem
Microcontroller. Der interessiert sich nur für das (gg. komprimierte
Bitmap). Und der PC sollte seit 1985 Platz für 16 * 188kb gerade noch
übrig haben?
Stefan K. schrieb:> ???> Die c-Dateien liegen normalerweise auf Deinem PC und nicht auf dem> Microcontroller. Der interessiert sich nur für das (gg. komprimierte> Bitmap). Und der PC sollte seit 1985 Platz für 16 * 188kb gerade noch> übrig haben?
aber schau dir mal die datei an und was da alles drin steht ;)
peter schrieb:> aber schau dir mal die datei an und was da alles drin steht ;)
Wenn ich das jetzt mal deute:
> // Generated by : ImageConverter 565 v2.3
dann ist das nicht monochrom - also 1Bit / Pixel - sondern das
5Rot6Gruen5Blau-Format für 16-Bit LCD-Farben, also 16 Bit/Pixel.
Du brauchst einen anderen Konverter un eine andere Grafik-Lib für
Monochrom-Bilder.
peter schrieb:> und schwarz weiß ist ja bereits wenn ich ein monochromes bitmap draus> mache oder?
Dein Bild hat 16-Bit Farben von denen aber nur Schwarz und Weiß
verwendet werden.
-> Falsch konvertiert.
Thomas F. schrieb:> peter schrieb:>> aber schau dir mal die datei an und was da alles drin steht ;)>> Wenn ich das jetzt mal deute:>>> // Generated by : ImageConverter 565 v2.3>> dann ist das nicht monochrom - also 1Bit / Pixel - sondern das> 5Rot6Gruen5Blau-Format für 16-Bit LCD-Farben, also 16 Bit/Pixel.>> Du brauchst einen anderen Konverter un eine andere Grafik-Lib für> Monochrom-Bilder.
aber ich habe in paint bereits aus dem png bild ein monochromes bitmap
erstellt. das hab ich in den converterer geladen und mir die datei
generieren lassen
In Deinem Bitmap ist jeder Pixel mit einem 16Bit Grauwert kodiert. Bei
den allermeisten Pixeln benutzt Du aber nur schwarz (0xffff) oder weiss
(0x0000) (Kodierung kann auch umgekehrt sein). Nur in den Übergängen
zwischen schwarz-weiss hast Du manchmal Grauwerte. Falls Du diese nicht
unbedingt brauchst, kommst Du auch mit einer Kodierung von 1 Bit pro
Pixel aus - was den Speicherbedarg um den Faktor 16 verringert.
Falls Du das - aus welchen Gründen auch immer - nicht machen willst: die
oben gezeigte Graphik eignet sich hervorragend für rlc. Würde sicher den
Faktor 1:10 bringen.
Im Übrigen ist die Bildgröße 115 * 180 Pixel und nicht wie oben
angegeben 115 * 160 Pixel.
Stefan K. schrieb:> In Deinem Bitmap ist jeder Pixel mit einem 16Bit Grauwert kodiert. Bei> den allermeisten Pixeln benutzt Du aber nur schwarz (0xffff) oder weiss> (0x0000) (Kodierung kann auch umgekehrt sein). Nur in den Übergängen> zwischen schwarz-weiss hast Du manchmal Grauwerte. Falls Du diese nicht> unbedingt brauchst, kommst Du auch mit einer Kodierung von 1 Bit pro> Pixel aus - was den Speicherbedarg um den Faktor 16 verringert.
ok wo kann ich das am besten machen ?? natürlich würde schwarz weiß
ausreichen
> Falls Du das - aus welchen Gründen auch immer - nicht machen willst: die> oben gezeigte Graphik eignet sich hervorragend für rlc. Würde sicher den> Faktor 1:10 bringen.>> Im Übrigen ist die Bildgröße 115 * 180 Pixel und nicht wie oben> angegeben 115 * 160 Pixel.
ja stimmt. sorry.
peter schrieb:> ok wo kann ich das am besten machen ?? natürlich würde schwarz weiß> ausreichen
Im Paint unter "Datei speichern" das Bildformat "BMP monochrom"
auswählen.
(Habs nicht getestet)
peter schrieb:> oder würde es einfach genügen, wenn ich im code nur die 0x00 und die> 0xFF drin lasse und den rest rausnehme oder zerschiest mir das dann> alles?
Letzteres.
Du brauchst einen Image-Konverter, der jedes Pixel in nur einem Bit
speichern kann. K.A. ob das der ImageConverter 565 v2.3 kann.
Zusätzlich musst Du diese bit-kodierten Graphiken auch ausgeben können.
Ob es dafür eine Funktion in Deiner Graphik-Library gibt, musst Du
nachschauen.
http://www.14core.com/c-array-generator/
Image to Array Generator
sieht aus, als ob es das macht, was Du willst. Pixels/Byte auf 8
stellen.
Vorsicht: Habe ich nur gegoogelt und nicht selbst verwendet.
Zusätzlich musst Du diese bit-kodierten Graphiken auch ausgeben können.
Ob es dafür eine Funktion in Deiner Graphik-Library gibt, musst Du
nachschauen.
Eine eigene Frage?
Dieser Thread ist über 10 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.