Forum: PC Hard- und Software BMP to 16Bit RGB Converter gesucht


von Blitz L. (blitzlampe)


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

von Matthias K. (nighty2k)


Lesenswert?

Gimp ^.^

von g457 (Gast)


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

von Blitz L. (blitzlampe)


Lesenswert?

Hallo,

es sind nur wenige Bilder die ich umwandeln muss. Habe mir soeben GIMP 
runter geladen, finde jedoch nicht (Datei -> Speichern
als -> '.bmp' -> Erweitert -> 'R5 G6 B5'). Benötige ich da noch 
irgendwas oder bin ich nur zu unblickig :-)

von g457 (Gast)


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

von spacedog (Gast)


Lesenswert?

Gimp kann auch direkt Bilder als c-array speichern.

von Blitzlampe (Gast)


Angehängte Dateien:

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",
};

von g457 (Gast)


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.

von Blitz L. (blitzlampe)


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.

von g457 (Gast)


Angehängte Dateien:

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

Das sind Oktalzahlen. 0377 ist 0xFF.

von g457 (Gast)


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

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Hallo!

Blitz Lampe schrieb:
> 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.

Dort steht ja auch nicht 377, sondern \377, was einer Oktaldarstellung
entspricht, also äquivalent zu hexidezimal 0xFF ist.

Gruß
Andreas Schweigstill

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.