Avec le ProgramEncoder, vous selectionnez l'exécutable, l'image source dans laquelle il sera encodé et l'image finale à créer.
Avec le programLauncher vous lancez votre exécutable à partir de l'image créee (même pas la peine de le puncher, il ne fait pas 50 lignes!).
Que le meilleur (?!!!!!!) gagne !

Code : Tout sélectionner
; Program Encoder
EnableExplicit
#TailleExecMax=512*512-4
Define.s nomProgramme, nomImage, nomImageEncodee
Define.i fichierExec, tailleExec, image, x, y
Define.a octet
Procedure EncodeOctet(x.i,y.i,val.a)
; Encode un octet dans la composante rouge de la couleur
Protected.l coul
coul=Point(x,y)
coul & $ffffff00 ;ABGR
coul | val
Plot(x,y,coul)
EndProcedure
UsePNGImageDecoder()
nomProgramme=OpenFileRequester("Choisissez votre exécutable","","Fichiers exécutables (*.exe)|*.exe",0)
If nomProgramme
tailleExec=FileSize(nomProgramme)
If tailleExec<1
MessageRequester("Erreur","Vous n'avez pas selectionné un exe valide !",#PB_MessageRequester_Ok)
ElseIf tailleExec<=#TailleExecMax
nomImage=OpenFileRequester("Choisissez une image","","Fichiers images (*.bmp;*.png)|*.bmp;*.png",0)
If nomImage
image=LoadImage(#PB_Any,nomImage)
If Not image
MessageRequester("Erreur","Impossible de charger l'image !",#PB_MessageRequester_Ok)
Else
ResizeImage(image,512,512,#PB_Image_Raw)
If StartDrawing(ImageOutput(image))
; Encodage de la taille de l'exécutable (sur 4 octets)
EncodeOctet(0,0, tailleExec & $ff)
EncodeOctet(1,0,(tailleExec & $ff00)>>8)
EncodeOctet(2,0,(tailleExec & $ff0000)>>16)
EncodeOctet(3,0,(tailleExec & $ff000000)>>24)
fichierExec=ReadFile(#PB_Any,nomProgramme)
If fichierExec
x=4
y=0
While Not Eof(fichierExec)
octet=ReadAsciiCharacter(fichierExec)
EncodeOctet(x,y,octet)
x+1
If x=512
x=0
y+1
EndIf
Wend
CloseFile(fichierExec)
EndIf
StopDrawing()
nomImageEncodee=SaveFileRequester("Enregistrez la nouvelle image sous...","","Fichiers images (*.bmp)|*.bmp",0)
If nomImageEncodee
If SaveImage(image,nomImageEncodee,#PB_ImagePlugin_BMP)
MessageRequester("","Image encodée enregistrée avec succès.",#PB_MessageRequester_Ok)
Else
MessageRequester("Erreur","L'image n'a pas pu être enregistrée !",#PB_MessageRequester_Ok)
EndIf
EndIf
EndIf
EndIf
EndIf
Else
MessageRequester("Erreur","La taille du fichier exécutable ne peut pas dépasser "+Str(#TailleExecMax)+" octets !",#PB_MessageRequester_Ok)
EndIf
EndIf
Code : Tout sélectionner
; Program Launcher
EnableExplicit
Define.i image, tailleExec, fichierExec, x, y
Procedure.a LitOctet(x.i,y.i)
Protected.l coul
coul=Point(x,y)
ProcedureReturn coul & $ff ; l'octet est dans la composante rouge de la couleur
EndProcedure
image=LoadImage(#PB_Any,"1.bmp")
If image
If StartDrawing(ImageOutput(image))
tailleExec=LitOctet(3,0)<<24 | LitOctet(2,0)<<16 | LitOctet(1,0)<<8 | LitOctet(0,0)
fichierExec=CreateFile(#PB_Any,"1.exe")
x=4
y=0
While tailleExec
WriteAsciiCharacter(fichierExec,LitOctet(x,y))
x+1
If x=512
x=0
y+1
EndIf
tailleExec-1
Wend
StopDrawing()
CloseFile(fichierExec)
RunProgram("1.exe","","",#PB_Program_Wait)
DeleteFile("1.exe")
EndIf
EndIf