BMP to 16Bit RGB Converter gesucht

OP #1571349
Lesenswert?

Hallo,

bin auf der Suche nach einem BMP zu 16Bit RGB Converter für Windows 
(Vista).

Das Ganze benötige ich damit ich auf einem Farbdisplay Bilder anzeigen 
kann. Das Display wird mit einem AVR angesteuert. Jetzt bin ich schon ne 
ganze Weile am suchen aber ich kann nix passendes finden.

Das Display hat 16Bit RGB Farbe mit folgender Bitmaske (RGB 565).

Kenn einer ein Tool womit ich ein BMP in die Daten für mein AVR 
umwandeln kann.

MFG Blitzlampe
Gast #1571380
Lesenswert?

Blitz Lampe schrieb:
> Das Display hat 16Bit RGB Farbe mit folgender Bitmaske (RGB 565).
>
> Kenn einer ein Tool womit ich ein BMP in die Daten für mein AVR
> umwandeln kann.

Wenns nur ein einziges Bild (oder sehr wenige..) ist/sind, dann mach das 
mit einem GUI-Tool Deiner Wahl, z.B. Gimp kann das (Datei -> Speichern 
als -> '.bmp' -> Erweitert -> 'R5 G6 B5').

Wenns viele Bilder sind: mit einem Tool Deiner Wahl (z.B. 
imagemagick/convert macht das in der Stapelverarbeitung mit links) alle 
in das selbe (einfach(!) zu interpretierende) Ausgangsformat bringen 
(PNG/[24, 48], BMP/[24, 32], unkomprimiertes TIFF/[24, 32, 48]), ein 
paar Zeilen C dazuhacken und in das passende Ausgabeformat dumpen 
('Text', raw, C-Header, ..).

HTH und HF
Gast #1571415
Lesenswert?

Blitz Lampe schrieb:
> [..] finde jedoch nicht (Datei -> Speichern als -> '.bmp' -> Erweitert
> -> 'R5 G6 B5'). Benötige ich da noch irgendwas [..]

Nein, das geht out-of-the-box [1]: Datei laden, dann auf 'Datei' -> 
'Speichern als' -> einen Dateinamen mit '.bmp' hinten dran eingeben -> 
Speichern -> (es erscheint ein kleiner Dialog) 'Advanced Options' (bitte 
frei übersetzen.. meine Maschinen laufen alle auf Englisch..) aufklappen 
und dort unter '16 bits' die Option 'R5 G6 B5' auswählen -> Speichern -> 
Speicher -> Ok -> Ja -> Ja wirklich sicher -> Ganz sicher -> mach hinne 
-> usw.

HTH

[1] getestet Versionen: 2.6.7 unter Linux/64, 2.4.7 unter Win/32
Gast #1571687
Lesenswert?

Habe soeben nochmal mit GIMP gespielt, habe es nun als BMP(5,6,5) 
gespeichert. Jetzt stellt sich mir eine Frage. Ich habe ein Bildchen mit 
8*8 Pixel und 16Bit Farbinfo das macht bei mir 128Byte Daten.

Die Daten für mein 8*8Bild müssten wie folgt aussehen.

Habe es jedoch noch nicht hinbekommen diese mir so auszugeben.

&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000
&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000
&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000
&H0000,&H0000,&H0000,&HFFFF,&HFFFF,&H0000,&H0000,&H0000
&H0000,&H0000,&H0000,&HFFFF,&HFFFF,&H0000,&H0000,&H0000
&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000
&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000
&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000,&H0000

Das erstellte C File enthält folgende Daten.

/* GIMP RGB C-Source image dump (Test1.c) */

static const struct {
  guint     width;
  guint     height;
  guint     bytes_per_pixel; /* 3:RGB, 4:RGBA */
  guint8    pixel_data[8  8  3 + 1];
} gimp_image = {
  8, 8, 3,
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 
0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 
0"
  "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 
0"
  "\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 
0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 
0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
};
Angehängte Dateien:
Gast #1572034
Lesenswert?

1
static const struct {
2
  guint     width;
3
  guint     height;
4
  guint     bytes_per_pixel; /* 3:RGB, 4:RGBA */
5
//                              ^
6
  guint8    pixel_data[8 * 8 * 3 + 1];
7
} gimp_image = {
8
  8, 8, 3,
9
//      ^
10
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
11
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
12
  "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
13
  "\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
14
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
15
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
16
};
 (fälschlich angewandte ★-werden-zu-[bold] repariert)

Das ist als RGB24 abgelegt. Lass mal ein BMP erzeugen und liess das dann 
selbst wieder ein - mit oder ohne Header, je nach Bedarf, ist ja nicht 
der Riesenaufwand.
OP #1572896
Lesenswert?

Also ich bin zu blöd. :-)

Ich raff es einfach nicht. Wenn ich mir das BMP in das C Array umwandel 
dann sieht das Ganze schon fast gut aus. Nur die Werte stimmen doch 
nicht oder???

0 für schwarz ist ja noch ok aber was will die 377 dort. Nach meinem 
Verständnis müsste dort FFFF für die Farbe weiß stehen.
Gast #1572997
Lesenswert?

Wie gesagt das ist RGB24.. und irgendwas scheint da nochdazu schief 
gegangen zu sein. Ich hab Dir mal quick'n'dirty ein kleines Grundgerüst 
gebastelt zum selber konvertieren (siehe Anhang).

Compiliert mit dem gcc ohne Spezialitäten:
1
$ gcc -Wall dumpRGB565.c -o dumpRGB565
Aufruf: Erst eine RGB24-Bitmap erzeugen (Farbtiefe ggf. erzwingen, siehe 
Kommandoreferenz von ImageMagick)..
1
$ convert Test.png Test.png.bmp
..dann dumpen:
[code]$ ./dumpRGB565 < Test.png.bmp ; echo
0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 
0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 
0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 
0x0 0x0, 0x0 0x0, 0x0 0x0, 0xff 0xff, 0xff 0xff, 0x0 0x0, 0x0 0x0, 0x0 
0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0xff 0xff, 0xff 0xff, 0x0 0x0, 0x0 0x0, 
0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 
0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 
0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 0x0 0x0, 
0x0 0x0,
[code]
Sieht schon fast schön aus, den Rest kann man bei wenigen Bildchen im 
Sourcecodeeditor einfach anpassen, da lohnt der Aufwand für den Dumper 
nicht wirklich.

Der Code ist abgsehen von ein paar eigenen Testbildchen weitgehend 
ungetestet - soll ja auch nur als Denkanstoß dienen.

HTH und HF
Angehängte Dateien:
Gast #1573049
Lesenswert?

Nachtrag: Recht einfach gehts auch mit Gimp (nach Bitmap/RGB565 
konvertieren.. convert will mir kein RGB565 nicht erzeugen tun) und 
anschließend hexdump:
1
$ hexdump -v -e '/1 "0x%02X, "' Test.png-rgb565.bmp ; echo
2
0x42, 0x4D, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x38, 0x00, 
3
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x03, 0x00, 
4
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x13, 0x0B, 0x00, 0x00, 0x13, 0x0B, 0x00, 0x00, 0x00, 0x00, 
5
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x1F, 0x00, 
6
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
7
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
8
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
9
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 
10
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 
11
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
12
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
13
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
14
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
..jetzt musst nur noch den 'Anfang' suchen :-)

HTH und HF

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