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