RSS Feed  •  Profil  •  Private Nachrichten  •  Registrieren  •  Login 
  
 
im Forum




Blog-Übersicht -> PNG/GIF/JPEG » simpleBMP (Megtron LCD Bootlogo) 555 Tage ohne Windows - oder doch nicht? :: Baubeginn der neuen Wientalterrasse inkl. Steg
PNG/GIF/JPEG » simpleBMP (Megtron LCD Bootlogo)
Verfasst am: 03.11.2014, 23:50   Autor: killerbees19
Bereits seit Ende 2010 (das "Dockstar" Zeitalter lässt grüßen) besitze ich einen USB-LCD von Megtron mit 240x128 Pixel und einer blau/weißen Anzeige inklusive Hintergrundbeleuchtung. In den letzten Jahren lag der leider sehr oft ungenutzt in einer Schublade. Vor einiger Zeit habe ich ihn dann für ein Projekt wieder aktiviert. Dank LCD4Linux und der serdisplib ist das auch keine große Hexerei. Letzteres beinhaltet auch für Linux ein praktisches Programm mit dem Namen sdcmegtron_tool. Darüber lässt sich z.B. auch das Bootlogo des LCD auslesen und ändern. Dabei wird eine sehr einfache, unkomprimierte und einfärbige (depth=1) BMP Grafik verwendet. Das Problem daran ist, dass ich selbst nach Stunden keine Lösung gefunden habe, wie man das gewünschte Format generiert. Denn egal wie man es abspeichert oder konvertiert, das Programm regte sich immer sofort auf und quittierte den Dienst:

Zitat:
Error: common_read_simplebmp(): no valid BMP file


Auf der nicht darauf spezialisierten Mailingliste von Debian wusste man auch keine wirkliche Lösung. Allerdings hat mir Uwe dort einige interessante Details sehr gut erklärt. Mein Herumpfuschen mit einem Hexeditor in der BMP-Datei war mit genauso wenig Erfolg gekrönt, wie alle vorherigen Versuche. Den Quellcode des sdcmegtron_tool's abzuändern war keine Option, da es nicht nur bei meiner Installation laufen sollte. Somit war die nächste Idee für einen Versuch geboren...

Um das aktuelle Bootlogo zu exportieren, enthält das Programm auch eine Funktion common_write_simplebmp(). Das und die Tatsache, dass BMP ein sehr einfach gehaltenes Dateiformat ist, sind ideale Voraussetzungen, einen eigenen Konverter zu schreiben. Da ich kein C/C++ Experte bin und ich es sowieso auf einer Website gut gebrauchen konnte, portierte ich die Funktion für die PHP-Welt. Mit dem Ergebnis, dass man das Bootlogo nur als PNG/GIF/JPEG Datei abspeichern und einmal durch meine Funktion jagen muss. Danach akzeptiert das Programm die BMP-Datei ohne zu Meckern! Very Happy

Herausgekommen ist unter anderem auch ein Online-Tool auf HAPPYTEC, womit man die Konvertierung eigener Bilder sofort und unkompliziert durchführen kann: image2simplebmp() Webwrapper Wink


Funktionsweise:
  • Das originale Bild wird zuerst einmal mit den GD-Funktionen von PHP geöffnet.
  • Danach wird ein neues BMP-Bild von Null weg erstellt. Dazu zählt auch der gesamte Header.
  • Am Ende wird Pixel für Pixel und somit Bit für Bit in die neue Datei kopiert.


Sonstiges:
  • Danke an den serdisplib Entwickler Wolfgang Astleitner, ohne dessen Code das niemals geklappt hätte.
  • Meine PHP-Portierung steht wie die Originalfunktion unter den Bedingungen der GPL zur freien Verfügung.
  • Falls es Probleme mit der Funktion oder dem Onlinetool gibt, können diese jederzeit im Forum gepostet werden.


Voraussetzungen:
  • PHP 5 (getestet mit PHP 5.2 - 5.5 unter Debian & Ubuntu)
  • GD Erweiterung mit Unterstützung für PNG, GIF und JPEG Dateien
  • optional noch mehr für die Filterfunktion...


Quellcode der PHP-Portierung:
  • v1.0.0 vom 03.11.2014: Verfügbar im Pastebin oder als Direktdownload.

    SHA512 Prüfsumme: 58bea69661a6f3e0bc8b806b78cdf00fe93c253e578f8958142f42f1a768752f0be9e8cfec9a9b001f8c641e3f3d20d8b237bea12aa668797b929e629f71adfb
    SHA256 Prüfsumme: 857432042e3ece430534e2c326013c4156b90ac85e864c1eb1a4bf691d934d44
    MD5 Prüfsumme: 378f9b2e5b146a8551b0b554e2bb4765


Zum Herunterladen der aktuellen Version kann unter GNU/Linux einfach folgender Befehl genutzt werden:
Code:
wget -O "image2simplebmp_1.0.0.php" "http://www.happytec.at/pastebin/download.php?id=275"

Die Prüfsumme sollte danach unbedingt kontrolliert werden!


Tipps zur Erstellung eines passenden Bootlogo's mit Gimp:
  • Neue Grafik mit 240x128px @ 72 dpi
  • Farbmodus des Bildes auf "Indiziert" einstellen
  • Schwarz/Weiß-Palette (1-Bit) verwenden
  • Das Ergebnis als PNG abspeichern





Hinweis: Es hätte sicherlich noch bessere und schönere Lösungen gegeben. Für mich war es allerdings eine schnelle und praktische Methode, bei der ich auch gleich noch einiges gelernt habe. Und ich weiß jetzt auch, dass PHP's Umgang mit binären Daten teilweise wirklich grässlich ist, wenn man Bit für Bit etwas zerlegen oder zusammensetzen möchte.

Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt am 04.11.2014, 00:03.


Autor Nachricht
Für diesen Beitrag können zur Zeit keine neuen Kommentare verfasst werden.

Kontaktiere den Autor des Beitrages, falls du Fragen dazu hast.


 

Alle Zeiten sind GMT + 2 Stunden (Sommerzeit)
Aktuelles Datum und Uhrzeit: 26.04.2018, 23:13
Nach oben
Valid HTML 4.01 Transitional
Valid CSS!

netcup - Internetdienstleistungen
 
 
[ happytec.at | forum.happytec.at | blog.happytec.at | esports.happytec.at | event.happytec.at ]