Forum: Mikrocontroller und Digitale Elektronik 4Bit-Graustufen in C-Array


von Freak (Gast)


Lesenswert?

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.

von epdm (Gast)


Lesenswert?

leider keine Antwort... ich hätte die gleiche Frage?

von S. R. (svenska)


Lesenswert?

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.

von Georg (Gast)


Lesenswert?

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

von Mark B. (markbrandis)


Lesenswert?

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.

von Jobst M. (jobstens-de)


Lesenswert?

Der gimp kann ein Bild als c-code speichern.


Gruß

Jobst

von Rolf M. (rmagnus)


Lesenswert?

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.

von grå (Gast)


Angehängte Dateien:

Lesenswert?

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,     ,     ,     ,     ,     ,     ,

von grå (Gast)


Lesenswert?

Nachtrag:
Die letzten 4 bzw. 5 Zeilen sind die Bildinformationen:
ab 0x78, 0x9A, 0xCD, ..."

von Marco G. (mg-programmer)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.