3 Stimmen

Wie man Daten in eine Anwendung einbettet

Ich möchte eine Anwendung erstellen, aber die Anwendung wird Icons (Bitmaps) für einige der Menüschaltflächen und andere Dinge verwenden. Ich möchte meine Anwendung als eine einfache, einzelne Standalone-Exe-Datei zu halten, was bedeutet, dass ich irgendwie alle Symbole in die Anwendung (EXE auf Windows) einbetten müssen, so dass ich die Bitmaps ohne externe Dateien laden kann.

Weiß jemand, wie ich das machen kann?

Nur einige weitere Informationen: Ich benutze wxWidgets, derzeit mit MSVC und ich würde eine Methode bevorzugen, die compilerübergreifend/plattformübergreifend funktioniert, wenn möglich.

Vielen Dank im Voraus!

6voto

Alex Martelli Punkte 805329

Sie könnten die XPM Format für Ihre Bitmaps, da es sich leicht in Ihren Code einbetten lässt (der sich natürlich in der Exe befinden wird, genau dort, wo Sie ihn haben wollen;-). Wie die Dokumente sagen,

Alle wxWidgets-Plattform für kleine Bitmaps und Icons. Sie können das XPM wie unten beschrieben inline einbinden, da es sich um C-Code handelt, oder Sie können es zur zur Laufzeit

(das "wie unten" ist ein #include Direktive) - Sie wären also perfekt kompiler- und plattformübergreifend, wenn Sie diesen Ansatz mit der "include"-Option wählen würden.

Für weitere Informationen über die XPM Format, siehe aquí . Es ist natürlich einfach, Konverter für andere gängige Formate in XPM zu finden.

1voto

doron Punkte 26342

Windows verfügt über Ressourcendateien, die Sie verwenden können. Alternativ könnten Sie ein kleines Dienstprogramm schreiben, das Ihr binäres Symbol in ein C-Konstanten-Array umwandelt

z. B:

const unsigned int my_icon[] = {0x12345678, 0x87654321, .... };

Dies lässt sich leicht in Perl erledigen, und Sie können dann über die Variable my_icon auf das Symbol zugreifen.

0voto

Lothar Punkte 11643

Da Linux keine Plattformlösung dafür hat, müssen Sie ohnehin Ihr eigenes System erstellen. Daher würde ich von plattformspezifischen Möglichkeiten zum Hinzufügen von Ressourcen unter Windows und Macosx abraten.

Sie können reswrap verwenden, das im Lieferumfang der FOX GUI-Werkzeugsatz ist ein einfaches Werkzeug zur Konvertierung beliebiger Binärdateien in c-char-Literale. Wenn Sie mit msvc kompilieren, werden Sie bald feststellen, dass große Dateien mit vielen großen Strings Gift für den Compiler sind. Ich fügte etwa 900 Symbole für mein Projekt hinzu, und der Compiler war damit erledigt.

Ich arbeite derzeit mit einer Lösung, bei der ich einfach ein Binärarchiv an das Ende der ausführbaren Datei kopiere. Jede Plattform kann heute den Pfad der ausführbaren Datei angeben, und weder ELF-, EXE- noch Mach-O-Dateien kümmern sich darum, ob am Ende einer ausführbaren Datei zusätzliche Daten hinzugefügt werden.

0voto

ezpresso Punkte 7438

Wir verwenden diese Technik in unseren Projekten:

  1. Utilice optipng ./image.png um Ihre png-Datei zu optimieren.
  2. Konvertieren Sie Ihre binären Bilddaten in einen Text mit png2wx Perl-Skript.
  3. Binden Sie Ihr Bild auf diese Weise in den Quellcode ein:

    {
        wxMemoryInputStream sm("\211PNG\r\n\032\n\000\000....", 116);
        m_bitmap = wxBitmap( wxImage(sm) );
    }

Vergessen Sie nicht, die Unterstützung für das PNG-Format in Ihre wxApp::OnInit() Funktion:

wxImage::AddHandler(new wxPNGHandler);

Hier ist der Link zum Original-Tutorial.

Hoffentlich hilft das!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X