Page 1 sur 2

Inclusion d'images dans un exe

Publié : dim. 17/déc./2023 16:27
par PhM
Bonjour,

J'ai réalisé un petit programme qui analyse un plan de vol généré par Simbrief pour Microsoft Flight Simulator (FS2020).
Il fonctionne bien mais un détail me chagrine.

L'image de présentation (SimBrief.png), incluse dans la fenêtre principale, a été mise en mémoire dans les datas :

Code : Tout sélectionner

DataSection

  Image_Start:
  IncludeBinary "SimBrief.png"    ; inclusion des images dans le programme
  Image_End:
  
  Image_Start1:
  IncludeBinary "T.png"
  Image_End1:
  
  Image_Start2:
  IncludeBinary "Takeoff2.png"
  Image_End2: 

  Image_Start3:
  IncludeBinary "Landing2.png"
  Image_End3:
  
  Image_Start4:
  IncludeBinary "papier.png"
  Image_End4:  
  
EndDataSection
Elle est appelée classiquement par :

Code : Tout sélectionner

  If CatchImage(0, ?Image_Start, ?Image_End - ?Image_Start) 
    ImageGadget(4, 140, 15, ImageWidth(0), ImageHeight(0), ImageID(0))         ; ImageGadget Simbrief affichée
  EndIf
Et, cela fonctionne et, jusqu'à là, tout va bien.

Mais, j'ai 4 autres images, mises en mémoire de la même façon dans les datas que j'appelle au travers d'une page html construite par le programme. Plus précisément, incluses dans une carte Leaflet/Openstreetmap au travers des fonctions construites :

Code : Tout sélectionner

	WriteStringN(1,"      var plane = L.icon({")
	WriteStringN(1,"          iconUrl: 'T.png',") ; T.png
	WriteStringN(1,"          iconSize: [10, 10],")
	WriteStringN(1,"          iconAnchor: [5, 6],")
	WriteStringN(1,"          popupAnchor: [0, 0],")
	WriteStringN(1,"      });	")
	WriteStringN(1,"")
Si les images (ici T.png) sont bien présentes dans le même dossier que le programme, cela fonctionne mais, si je les retire, et bien qu'elles aient été mise en mémoire tampon, cela ne marche plus ?

Dans ce cas assez spécifique, pensez-vous avoir une solution ?

Par avance, merci pour le partage de votre savoir...

Re: Inclusion d'images dans un exe

Publié : dim. 17/déc./2023 18:38
par Mindphazer
A mon avis, vus qu'elles sont incluses dans ton exe, il faudrait que, au démarrage de ton appli, tu crées ton ou tes images, par exemple de cette manière :

Code : Tout sélectionner

If CreateFile(0, "T.png")
  WriteData(0, ?Image_Start1, ?Image_End1 - ?Image_Start1)
  CloseFile(0)
Endif
Comme ça, tes images existent dans ton dossier, et elles peuvent être chargées par ta page HTML

Re: Inclusion d'images dans un exe

Publié : dim. 17/déc./2023 19:49
par PhM
Oui, tu as bien compris et ta méthode est certainement bonne mais, une fois créer au lancement du programme, ces images seront présentes et visibles dans le dossier du fichier HTML.

Ou alors, il faudrait que le programme efface les images une fois la page HTML affichée.

En tout cas, merci, je vais tester ta méthode.

Re: Inclusion d'images dans un exe

Publié : dim. 17/déc./2023 22:26
par SPH
PhM a écrit : dim. 17/déc./2023 19:49 En tout cas, merci, je vais tester ta méthode.
Tu nous diras si tu as réussi. Ca m'intéresse de savoir ta méthode. :arrow: :idea:

Re: Inclusion d'images dans un exe

Publié : dim. 17/déc./2023 23:23
par Mindphazer
PhM a écrit : dim. 17/déc./2023 19:49 Oui, tu as bien compris et ta méthode est certainement bonne mais, une fois créer au lancement du programme, ces images seront présentes et visibles dans le dossier du fichier HTML.

Ou alors, il faudrait que le programme efface les images une fois la page HTML affichée.

En tout cas, merci, je vais tester ta méthode.
Sinon, tu enregistres tes images dans le répertoire temporaire (GetTemporaryDirectory()) et tu mets le chemin complet dans ton fichier HTML
Elles seront toujours visibles, mais quand même plus difficilement accessibles

Re: Inclusion d'images dans un exe

Publié : lun. 18/déc./2023 6:58
par PhM
Merci pour vos réponses éclairées.

Tout d'abord, pour Mindphazer et SPH, oui la solution WriteData fonctionne parfaitement d'un point de vue technique. Néanmoins, elle ne fait que placer les images générées dans le dossier du fichier HTML. Et, les effacer ensuite, empêche la consultation ultérieure de ce même fichier HTML avec ces images.

Ceci étant dit, l'idée de stocker en binaire les images pour les ressortir ensuite de ce programme pourra me servir à l'avenir. Cela m'a directement fait penser à un système de cryptage avec mot de passe pour accéder à un fichier d'images...

Mais, j'ai donc opté pour une autre méthode plus simple que de cacher les images dans un dossier. J'ai utilisé un hébergeur d'images gratuit, en l’occurrence, zupimages (https://www.zupimages.net/).

Je l'utilise depuis quelques années, notamment pour placer des images sur des forums et, il semble fiable avec un accès dans le temps des images. Au pire, j'aurai le pouvoir de réagir si il devenait défaillant.

Peut-être connaissez-vous un équivalent aussi fiable ?

Code : Tout sélectionner

	WriteStringN(1,"      var plane = L.icon({")
	WriteStringN(1,"          iconUrl: 'https://zupimages.net/up/23/50/sji6.png',") ; T.png
	WriteStringN(1,"          iconSize: [10, 10],")
	WriteStringN(1,"          iconAnchor: [5, 6],")
	WriteStringN(1,"          popupAnchor: [0, 0],")
	WriteStringN(1,"      });	")
	WriteStringN(1,"")
Merci encore pour cette aide qui a enrichie ma réflexion sur le sujet.

Re: Inclusion d'images dans un exe

Publié : lun. 18/déc./2023 12:34
par Ar-S
Je t'ai MP, sinon regarde ma signature.. 8)

Re: Inclusion d'images dans un exe

Publié : lun. 18/déc./2023 13:23
par PhM
Merci, je t'ai répondu !

Re: Inclusion d'images dans un exe

Publié : lun. 18/déc./2023 17:59
par PhM
Le programme PLN Analyseur est disponible dans la rubrique Applications.
Merci à tous pour votre aide.

Re: Inclusion d'images dans un exe

Publié : lun. 18/déc./2023 18:14
par SPH
PhM : j'essaye de résumer ta demande (j'espère ne pas me tromper)

:arrow: Comme tu embarques l'image en datas dans ton EXE, tu voudrais utiliser ces datas pour afficher l'image sans qu'il faille réécrire les datas dans un fichier. Puisque ces data sont dans la mémoire de l'ordi (quand on lance l'exe), comment les utiliser tel quel ! :!: :?:

J'ai bon ? :?:

Re: Inclusion d'images dans un exe

Publié : lun. 18/déc./2023 18:25
par Mindphazer
Je crois que oui ! :mrgreen:

Re: Inclusion d'images dans un exe

Publié : lun. 18/déc./2023 18:28
par SPH
Mindphazer a écrit : lun. 18/déc./2023 18:25 Je crois que oui ! :mrgreen:
... et la réponse est .......... ?? :?: :!: :idea:

Re: Inclusion d'images dans un exe

Publié : mar. 19/déc./2023 8:57
par PhM
SPH :

oui, c'était cela. Mais, j'ai changé de méthode en téléchargeant les images de la page HTML depuis un serveur extérieur. Il n'y a donc plus de raison d'inclure les images liées à la page HTML générée dans l'exe !

L'application est terminée et diffuser sur ce forum, entre autres, à la rubrique "APPLICATIONS"

Re: Inclusion d'images dans un exe

Publié : mar. 19/déc./2023 11:11
par SPH
Ok, mais moi, ça m'intéresse de savoir comment interpréter les datas d'une image dans un EXE :!:

Si quelqu'un sait le faire, please, dites le moi :idea:

Re: Inclusion d'images dans un exe

Publié : mar. 19/déc./2023 13:41
par Ar-S
@SPH
Tu as l'exemple dans son code...

A la compilation tu inclus l'image

Code : Tout sélectionner

;L'image est chargée en mémoire de l'exe car inclus dans la datasection
If CatchImage(0, ?Image_Start, ?Image_End - ?Image_Start) 
    ImageGadget(4, 140, 15, ImageWidth(0), ImageHeight(0), ImageID(0))         ; ImageGadget Simbrief affichée
  EndIf

; inclusion des images dans le programme
  DataSection
  Image_Start:
  IncludeBinary "tonimage.png"    
  Image_End:
  
  endDatadection
  
A la différence de loadimage qui va chercher un fichier, ton catchimage va chercher les datas dans ton exe.