Merci d'afficher les greetings si tu t'en sert.
Depuis je ne fais plus comme ça et suis passé à du tableau plutôt que de la liste mais il fonctionne même si le code est bordeleux.
ça te donnera la méthode de fonctionnement.
Code : Tout sélectionner
; Ar-S ASCII 2 PIXEL
; code de 2008 fonctionne V PB 5.60 x64 OK
; Routines de conversion réalisées avec l'aide de Dobro & LNA
UsePNGImageDecoder()
UsePNGImageEncoder()
Declare.i car_pixel(car1,car2,car3,car4)
Declare.s pixel_4car(pixel)
Enumeration
#WIN
#BT_T2I
#BT_I2T
#Fichier
#Image
#BT_X
EndEnumeration
Global NewList Liste()
Procedure.i car_pixel(car1,car2,car3,car4)
pixel=RGBA(car1,car2,car3,car4)
ProcedureReturn pixel
EndProcedure
Procedure.s pixel_4car(pixel)
R=Red(pixel)
g=Green(pixel)
b=Blue(pixel)
a=Alpha(pixel)
car$=Chr(R)+Chr(g)+Chr(b)+Chr(a)
ProcedureReturn car$
EndProcedure
Procedure OpenWindow_WIN()
If OpenWindow(#WIN, 330, 155, 640, 150, "ASCII2PIXEL Lite", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(#BT_T2I, 20, 40, 300, 45, "TXT en IMAGE", #BS_FLAT)
ButtonGadget(#BT_I2T, 325, 40, 300, 45, "IMAGE en TXT",#BS_FLAT)
ButtonGadget(#BT_X, 20,90,600,45,"QUITTER",#BS_FLAT)
EndIf
EndProcedure
OpenWindow_WIN()
;{- Event loop
Repeat
Select WaitWindowEvent(10)
Case #PB_Event_Gadget
Select EventGadget()
Case #BT_X
End
Case #BT_T2I
; TXT 2 IMG
NomFichier$ = OpenFileRequester("Fichier texte à encoder",GetCurrentDirectory(),"*.*",0)
If NomFichier$
OpenFile(#Fichier, NomFichier$)
nbc=0 ;nbp=1
ClearList(Liste())
Position=0
tf$=Str(Lof(#Fichier)) ; taille du fichier
tf$=RSet(tf$,16,"0") ; ajout de "0" à gauche 16 chiffre
AddElement(Liste()) ; formatage de la taille en pixel 2x4
Liste()=car_pixel(Asc(Mid(tf$,1,1)),Asc(Mid(tf$,2,1)),Asc(Mid(tf$,3,1)),Asc(Mid(tf$,4,1)))
AddElement(Liste())
Liste()=car_pixel(Asc(Mid(tf$,5,1)),Asc(Mid(tf$,6,1)),Asc(Mid(tf$,7,1)),Asc(Mid(tf$,8,1)))
AddElement(Liste())
Liste()=car_pixel(Asc(Mid(tf$,9,1)),Asc(Mid(tf$,10,1)),Asc(Mid(tf$,11,1)),Asc(Mid(tf$,12,1)))
AddElement(Liste())
Liste()=car_pixel(Asc(Mid(tf$,13,1)),Asc(Mid(tf$,14,1)),Asc(Mid(tf$,15,1)),Asc(Mid(tf$,16,1)))
AddElement(Liste())
Liste()=car_pixel(91,60,35,93) ; [<#] balise
nbc+20
CloseFile(#Fichier)
OpenFile(#Fichier, NomFichier$)
While Eof(#Fichier)=0
car1.c=0
car2.c=0
car3.c=0
car4.c=0
If ReadData(#Fichier,@car1,1)
nbc+1
If ReadData(#Fichier,@car2,1)
nbc+1
If ReadData(#Fichier,@car3,1)
nbc+1
If ReadData(#Fichier,@car4,1)
nbc+1
EndIf
EndIf
EndIf
EndIf
nbp+1
pixel= car_pixel(car1,car2,car3,car4)
AddElement(Liste())
Liste()=pixel
Wend
;Debug "Il y a "+Str(nbc)+" caracteres"
CloseFile(#Fichier)
;-{ 1ere tentative de gestion de la taille des images.
If nbc<32000
Xpic=160 : Ypic = 50
ElseIf nbc>31999 And nbc<64000
Xpic=320 : Ypic=50
ElseIf nbc>63999 And nbc<192000
Xpic=320 : Ypic = 150
ElseIf nbc=191999 And nbc<1024000
Xpic=640 : Ypic = 400
ElseIf nbc>1023999 And nbc<1920000
Xpic=800 : Ypic = 600
ElseIf nbc>1919999 And nbc<3145728
Xpic=1024 : Ypic = 768
ElseIf nbc=3145727 Or nbc<5242880
Xpic=1280 : Ypic = 1024
ElseIf nbc>5242880
MessageRequester("Alert","TROP DE CARACTERES")
Break
EndIf
;creation de l'image
CreateImage(#Image,Xpic,Ypic,32)
StartDrawing(ImageOutput(#Image))
ResetList(Liste())
For Y=1 To Ypic-1
For x=1 To Xpic-1
compteur=compteur+1
NextElement(Liste())
pixel=Liste()
DrawingMode(#PB_2DDrawing_Default)
Plot(x,Y,pixel)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Plot(x,Y,pixel)
If compteur=nbp+5 ; ajout 5 rangs au compteur pour taille et balise
compteur=0
Break 2
EndIf
Next x
Next Y
StopDrawing()
;- Sauvegarde
Delay(500)
NomFichier$ = SaveFileRequester("Enregistrer image", GetCurrentDirectory(), "*.png", 0)
If NomFichier$
ext$=LCase(GetExtensionPart(NomFichier$))
If ext$<>"png" : NomFichier$=NomFichier$+".png"
EndIf
Resultat = SaveImage(#Image, NomFichier$ , #PB_ImagePlugin_PNG)
MessageRequester("terminé","Terminé")
Else
;SetGadgetText(#AFFICHE,Cancel$) ;-annul
Debug "Annulé"
EndIf
Else
;SetGadgetText(#AFFICHE,Cancel$) ;-annul
Debug "Annulé"
EndIf
;- BT 2 - IMAGE en TXT -----------------------
Case #BT_I2T
filtre$=filtre2$
filtre=0
; GetPrefDir(pref$,#PNG)
NomFichier$ = OpenFileRequester(Loadpng$, Defaut$, filtre$, 0)
Texte$="":car_4$="":pixel=0:compteur=0
Resultat = LoadImage(#Image, NomFichier$,32)
If OpenFile(#Fichier, NomFichier$)
nbff=1
StartDrawing(ImageOutput(#Image))
For Y=1 To ImageHeight(#Image)-1
For x=1 To ImageWidth(#Image)-1
nbf=nbf+1
pixel=Point(x,Y)
If pixel>0
DrawingMode(#PB_2DDrawing_Default)
car_4$ = Chr(Red(pixel)) + Chr(Green(pixel)) + Chr(Blue(pixel))
;Debug "sans Alpha : "+car_4$
DrawingMode(#PB_2DDrawing_AlphaChannel)
;car_4$ + Chr(Alpha(pixel))
car_4$ + Chr(Alpha(Point(x,Y)))
;Debug "avec Alpha : "+car_4$
EndIf
Texte$+car_4$
If Left(car_4$,4)="[<#]" ; recherche balise taille
debutf=Len(Texte$) ; nb caracteres (taille et la balise) en principe 15 (3x4) 16 avec le zero
tf=Val(Right(Texte$,16))+debutf+1 ;(+1=16) ; recupere la taille du fichier et ajoute de 3 rangs de 4 pour synchro compteur
Texte$="" ; enlève les infos taille du texte après lecture
EndIf
If nbf=(tf+1)/4:Break 2:EndIf ; tf+1 car la taille du fichier a le zero inclu
Next x
Next Y
StopDrawing()
FreeImage(#Image)
; SetLastDir(NomFichier$,#PNG)
;- AFFICHAGE
Debug Texte$
MessageRequester("terminé","Terminé")
Else
Debug "Annulé"
EndIf
EndSelect
EndSelect
ForEver