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.
Freak schrieb: > d.h. ein > Byte repräsentiert 2 Pixel! Das ist aber für die Verarbeitung ziemlich ungünstig, ich würde ein Byte pro Pixel nehmen. Georg
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):
1 | 0x42, 0x4D, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, |
2 | 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0x6C, 0x00, |
3 | 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, |
4 | 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, |
5 | 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x13, 0x0B, |
6 | 0x00, 0x00, 0x13, 0x0B, 0x00, 0x00, 0x10, 0x00, |
7 | 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x42, 0x47, |
8 | 0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
10 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
11 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
12 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
13 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
14 | 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, |
15 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
16 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0E, |
17 | 0x0E, 0x00, 0x20, 0x20, 0x20, 0x00, 0x32, 0x32, |
18 | 0x32, 0x00, 0x44, 0x44, 0x44, 0x00, 0x54, 0x54, |
19 | 0x54, 0x00, 0x58, 0x58, 0x58, 0x00, 0x67, 0x67, |
20 | 0x67, 0x00, 0x79, 0x79, 0x79, 0x00, 0x8B, 0x8B, |
21 | 0x8B, 0x00, 0x9D, 0x9D, 0x9D, 0x00, 0xAD, 0xAD, |
22 | 0xAD, 0x00, 0xAF, 0xAF, 0xAF, 0x00, 0xC0, 0xC0, |
23 | 0xC0, 0x00, 0xD2, 0xD2, 0xD2, 0x00, 0xE4, 0xE4, |
24 | 0xE4, 0x00, 0x78, 0x9A, 0xCD, 0xEF, 0x67, 0x89, |
25 | 0xAC, 0xDE, 0x46, 0x78, 0x9A, 0xBD, 0x34, 0x57, |
26 | 0x89, 0xAB, 0x23, 0x45, 0x78, 0x9A, 0x12, 0x34, |
27 | 0x57, 0x89, 0x01, 0x23, 0x45, 0x78, 0x00, 0x12, |
28 | 0x34, 0x57, , , , , , , |
Nachtrag: Die letzten 4 bzw. 5 Zeilen sind die Bildinformationen: ab 0x78, 0x9A, 0xCD, ..."
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
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.