Pictures und Icons integrieren (in Exe)

Hallo,

ich möchte Icons mit in die Exe packen. Aktuell werden die in einem Ordner mit ausgeliefert.
Damit kann der Anwender natürlich jede Menge Unsinn anstellen.
Deswegen die Frage: wie kann ich Bilder / Icons so packen, daß diese in der Exe mit integriert werden?

Du könntest die Bilder als Hex-String direkt ins Projekt integrieren und dann eine Shared Computed Property MyPicture As Picture erzeugen (Pseudo Code):

Public Shared Property MyPicture As Picture
Get
  Static mb As MemoryBlock = DecodeHex(PictureHexStringData)
  Return Picture.FromData(mb)
End Get

Set
  
End Set

End Property

Huch! Wie geht das denn?

Es muss doch eine Einstellung für “Import Pictures” oder so geben.
Oder liefern alle Xojo-Programmierer ihre Icons an Kunden aus (und die spielen dran rum)?

Kannst ja auch eine Prüfsumme nutzen oder die aus einer sqlite Tabelle aus einem Blob laden.
Oder dem Bild Unterordner einfach nur lese Rechte geben.

Ich möchte mich nicht in Sqlite oder Blob einarbeiten, sondern die Bilder mit packen.
Es kann doch nicht sein, daß es da nichts gibt?

Wüßte nicht das Xojo das anbietet.
Was noch ginge wäre alle Bilder in eine gesamt Binär Datei zu schreiben. (Als eigene Ressourcen Datei)
Picture.ToData
Picture.FromData
https://documentation.xojo.com/api/files/binarystream.html

Als Hex String in einem Property ist doch recht einfach.
Binär Datei wird zu einem String, String mit Copy/Paste in eine Eigenschaft ablegen.
Beim laden aus Hex String vorher Binär Daten machen.

Unter macOS ist das nicht anders. Was sollen die User damit machen?

Und das ganze fast 30 mal. Warum bietet Xojo das nicht an?
Sowas ist essenziell!
Ich befasse mich mal mit dem “Bilder in String” umwandeln.
Danke!

Das ist die xojo-Art, Dinge zu tun. Es gibt keinen anderen Weg. Wenn Sie nicht bereit sind, viele Problemumgehungen zu lernen, ist Xojo nichts für Sie.

Dies ist eine gute Option, aber Sie können mit base64 etwas Platz sparen

Ich verwende eine verschlüsselte SQLite-Tabelle, um alle Bilder zu speichern.

@Beatrix_Willius
Weil sowas absolut sicherheitsrelevant ist. Wenn der Kunde auf das “Stop” Zeichen drückt, muss eine Maschine anhalten und nicht “Starten”, nur wei sich der Azubi einen Scherz erlaubt hat.

Ressourcen in einer Exe können auch ausgetauscht werden.
Das einfachste ist einfach eine Liste mit Dateilängen vor dem Laden zu vergleichen.
Und dann einfach eine Messagebox das das Programm sabotiert wurde bzw. es dann nicht startet.

Als Beispiel
=LoadPictureSecure("icons8_subtract_16px.png",118)

PureBasic kann Bilder einbinden und aus der Exe lesen :wink:

Hmmm, schade, daß PureBasic auch nicht mehr weiter entwickelt wird…

OT, “die” bauen grad das Backend auf C um wie ich laß.
Ich hatte es immer gemieden weil es nicht OOP ist.

Warum möchten Sie Ihre Symbole ausblenden, die Sie weiterhin in Ihrer Software anzeigen werden?

Wie auch immer, ein böser Junge wird immer einen Weg finden, sie zu nehmen (Foto, Screenshot usw.).

Ich verschwende keine Zeit damit, meine Symbole zu verstecken …

@Emile_Schwarz
Weil sowas absolut sicherheitsrelevant ist. Wenn der Kunde auf das “Stop” Zeichen drückt, muss eine Maschine anhalten und nicht “Starten”, nur weil sich der Azubi einen Scherz erlaubt hat und die .png Dateien vertauscht hat.

Peter, es wurde doch eine Variante aufgezeigt, die Sie verwenden können: Picture als Base64 und/oder Hex String direkt als Konstante ins Projekt aufnehmen und dann Picture.FromData verwenden.

Boah, daß das alles so umständlich ist…
Gibt es irgendwo ein Beispiel, wie man Base64streams in Bilder umwandelt?
In den Examples habe ich nichts gefunden.

Picture.FromData (https://documentation.xojo.com/api/graphics/picture.html#picture-fromdata) sollte ausreichen.

I know that, but where should i insert the base64 string???
This example uses an image, but i have a string

Dein Bild ist in einem Folderitem, Base64 encoded.
Das liest Du mit einem BinaryStream ein.
Das Base64 decoden.
Du machst ein Picture.FromData mit den decodierten Daten.
Und damit kannst Du dann malen.