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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.