4Bit-Graustufen in C-Array

#4889432
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.
Gast #4889458
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,     ,     ,     ,     ,     ,     ,
Angehängte Dateien:
#4980955
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren