Wie kann man Bilder als Programmcode verwendbar speichern?

  • Schon einmal ein Programm geschrieben, das mehrere zusätzliche Dateien, wie Konfigurationen, Definitionen für grafische Benutzeroberflächen und Bilder benötigt?

    Diese zusätzlichen Dateien können den Funktionsumfang eine Programms erheblich erhöhen.
    Das Problem daran ist, dass diese Dateien verändert oder gelöscht werden können. Danach ist das Programm selbst auch unbrauchbar.

    Klar: Textdateien und diverse Daten kann man wieder herstellen. Aber was kann man machen, wenn Bilder, die essentiell für grafische Benutzeroberflächen sind, nicht existieren? Diese sind nicht so einfach wiederherzustellen.

    Doch es gibt eine nette Lösung über einen sogenannten HEX-Editor.
    Diese Programme können jede beliebige Datei einlesen und ihre Werte anzeigen. Oft können diese auch kopiert werden.

    Wenn man diese Werte in einen Texteditor kopiert, kann man diese Werte in eine Form wie folgt bringen:

    Code
    \x089\x050\x04E\x047\x00D\x00A\x01A\x00A\x000\x000\x000\x00D....

    Alle größeren Programmiersprachen können diese Werte verwenden, wenn man sie in einen String schreibt.

    Sind diese Werte in einem String abgelegt, kann man diese verändern, vergleichen, oder auch in Dateien schreiben.

    ---------------------------------------------------

    Auf diese Weise kann jede beliebige Datei geschrieben werden: Ausführbare Dateien, Bilder, Dokumente, etc.

    Wenn man viele Dateien auf diese Weise in einem Programmcode ablegt, kann man damit jede beliebige Installationsroutine schreiben und ist nicht auf vorgefertigte Frameworks angewiesen.
    Dies bietet vollkommen Freiheit über den Programmcode.

    ------------------------------------------------------------

    Ich hoffe, diese Anleitung hilft den Software-Entwicklern, die dies lesen Installationsroutinen zu verstehen und diese selbst zu kreieren.

    Liebe Grüße
    Dodo

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Klar funktioniert das in Java.
    Ich habs jedoch erst mit C++ gemacht, aber sehr unterschiedlich sind diese Sprachen in diesem Bereich nicht. Hier der C++-Code:

    Code
    void writePngIconFile()
    {
    	const char image[] = "\x089\x050\x04E\x047\x00D\x00A\x01A\x00A\x000\x000\x000\x00D\x049\x048\x044\x052\x000\x000\x000\x020\x000\x000\x000\x020\x008\x006\x000\x000\x000\x073........"; // Für das Beispiel abgeschnitten
    	ofstream imageFile("./data/img/icon.png", ios_base::binary | ios_base::trunc | ios_base::out);
    	imageFile.write(image, sizeof(image) - 1);
    	imageFile.close();
    }

    Something big is coming. And there will be pirates and ninjas and unicorns...