Hallo Leute,
gibt es ein Programm das 4bit-Graustufenbilder in ein C-Array
konvertiert oder ein Hex-Code ausgibt?
Das wichtige dabei ist, das ein Pixel mit 4bit definiert ist, d.h. ein
Byte repräsentiert 2 Pixel!
Gruß
C.E.
Speichere das Bild einfach unkomprimiert mit 4 Graustufen ab und benutze
einen beliebigen Binär-nach-C-Konverter. Oder du schreibst dir was für
z.B. PGM-Bilder selbst - ImageMagick kann die aus beliebigen Quelldaten
erzeugen.
epdm schrieb:> leider keine Antwort... ich hätte die gleiche Frage?
Wenn die üblichen Verdächtigen wie ImageMagick usw. das nicht können,
dann wird man sich wohl ein Programm dafür schreiben müssen.
Übrigens wurde weder damals vom Themenersteller noch von Dir das
konkrete Bildformat genannt.
Georg schrieb:> Freak schrieb:>> d.h. ein>> Byte repräsentiert 2 Pixel!>> Das ist aber für die Verarbeitung ziemlich ungünstig,
Naja, so schlimm ist das auch nicht. Früher(tm) wurde meist mit
Bitplanes gearbeitet, d.h. es wurde in einem Byte immer von 8 Pixeln
jeweils ein Bit gespeichert, so dass jeder Pixel auf 4 Bytes verteilt
ist.
> ich würde ein Byte pro Pixel nehmen.
Das wiederum produziert einen Speicher-Overhead von 100%, was ich nun
wieder als "ziemlich ungünstig" bezeichnen würde.
So geht's:
Gimp: reduziere das Bild auf 16 Graustufen, indem Du vorher ne
entsprechnde Palette mit 16 Graustufen erzeugst.
Dann als BMP abspeichern.
Das dann in nem Hex-Editor (zB Bless) öffnen, den Header und die Palette
entfernen und dann kannst Du's als C (Text) exportieren.
Dann sind 2 Pixel in einem Byte.
So sieht ein 16 Graustufen BMP mit 2 Pixel pro Byte aus (noch incl.
Header):
Ich hatte das selbe Problem, ein Bild in ein Code Array zu konvertieren.
Daher habe ich ein Programm geschrieben, das diese Aufgabe übernimmt.
Es kommt mit folgenden Bildformaten zurecht:
- bmp
- png
- gif
- jpeg
Als Ausgabeformat kann man wählen zwischen
- Schwarz/weis (1Bit/Pixel)
- 8Bit Graustufen (8Bit/Pixel)
- RGB444 (12Bit/Pixel)
- RGB565 (16Bit/Pixel)
- RGB666 (18Bit/Pixel)
- RGB888 (24Bit/Pixel)
Beim auszugebenden Array kann man vorgeben, wieviele Werte pro Zeile
angezeigt werden sollen.
Je nach Koordinatensystem des Displays am Mikrocontroller kann das Bild
an x- und y-Achse gespiegelt werden.
Ich hoffe, das hilft weiter