www.mikrocontroller.net

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


Autor: Blitz Lampe (blitzlampe)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias K. (nighty2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gimp ^.^

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Blitz Lampe (blitzlampe)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spacedog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gimp kann auch direkt Bilder als c-array speichern.

Autor: Blitzlampe (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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",
};

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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",
};
 (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.

Autor: Blitz Lampe (blitzlampe)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: g457 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
$ gcc -Wall dumpRGB565.c -o dumpRGB565
Aufruf: Erst eine RGB24-Bitmap erzeugen (Farbtiefe ggf. erzwingen, siehe 
Kommandoreferenz von ImageMagick)..
$ 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: g457 (Gast)
Datum:

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

HTH und HF

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.