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
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
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 :-)
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
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", };
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.
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.
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
> 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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.