Je peine encore avec cette histoire de conversion de Pixel en texte.
En gros le soft lits les caractères et les convertis en pixels.
1 Pixel pouvant contenir 4 caractères via les valeur RGBA. (utilisant 1er car => R 2eme Car => V 3eme car => B et 4eme car = A(lpha))
Je vous soumets ce problème qui commence sérieusement à me les briser.
Je ne pige pas pourquoi le code n'arrive pas à lire l'image créé pour en décoder le message.
L'image se créée pourtant
Je vous propose le code "light" qui vous permettra de tester la chose.
Code : Tout sélectionner
; ASCII2PIC by LDVMULTIMEDIA
; Routines de conversion réalisées par Dobro & LNA
;P.B 4.10 puis PB 4.20 beta 5 puis 4.20 / de 14/04/2008 au 10/05/2008
;PB 4.41 du 23/03/2010 au..
Declare.s pixel_4car(pixel)
Declare.l car_pixel(car1,car2,car3,car4)
UsePNGImageEncoder()
UsePNGImageDecoder()
UseJPEGImageDecoder()
Global V$="2.0 beta2"
Global Path$=GetCurrentDirectory()
Global sites$=Chr(10)+"LDV MULTIMEDIA : http://ldvmultimedia.com"+Chr(10)+Chr(10)+Space(15)+"Grand merci à Dobro & LNA"+Chr(10)+" Site de Dobro : http://michel.dobro.free.fr"
lng$="Français"
If lng$="Français"
Global Cancel$="Annulé"
Global errorfile$="Le fichier est introuvable"
Global nofile$="Le fichier est indisponible pour Le moment, veuillez ré-essayer dans quelques minutes"
Global ddl$="Téléchargement..."
Global dejaup$="Vous avez déjà la dernière Version"
Global QuoideNeuf$=Chr(10)+" "+V$+" - Quoi de neuf ?"+Chr(10)+"> Correctif mineur - Message clignotant pour l'info de mise à jour"+Chr(10)+"> Correction d'un bug majeur de décalage de texte"+Chr(10)+"> Recodage de la gestion des langues pour une compatibilité avec les OS non français ou anglais"+Chr(10)+"> Bug mineur corrigé"+Chr(10)+"> Format BMP supporté"+Chr(10)+"> Mise à jour automatique"+Chr(10)+"> Bug d'affichage de texte long corrigé"+Chr(10)+"> Vérification des extensions"+Chr(10)+"> Copie du texte dans le presse papier"+Chr(10)+"> Copie du texte dans un fichier .txt"
Global Sign$="2008 / LDV MULTIMEDIA - Ce logiciel est gratuit - http://ldvmultimedia.com"
Global f3d$="Convertissez un texte en image et vice et versa"
Global cv1$="Convertir du Texte en image"
Global cv2$="Convertir une image en Texte"
Global convert$="Effectuer une conversion"
Global filtre1$="Ficher Texte|*.txt;*.TXT;*.pb;*.php;*.html;*.htm;*.js;*.ini"
Global filtre2$="Ficher image (*.png)|*.png;*.PNG"
Global loadtxt$="Charger un fichier Texte"
Global alert$="Nombre de caractères trop important !"
Global wait$="Patientez S.V.P"
Global png$="Ficher PNG|*.png;*.PNG"
Global savpng$="Sauver l'image PNG"
Global about$=Space(8)+"Ce logiciel a été créé par LDVMULTIMEDIA"+Chr(10)+Space(25)+"Codé par Ar-S et Dobro"+Chr(10)+Space(27)+"Ce logiciel est gratuit"+Chr(10)+sites$
Global over$="Opération terminée"
Global styl$="Texte (*.txt)|*.txt|Autres (*.*)|*.*"
Global Loadpng$="Charger une image .PNG"
Global Clipb$="Copier le texte dans le presse papier"
Global savtxt$="Enregistrer le texte dans un fichier .txt"
Global clipbok$="Le texte a été copié dans le presse papier"
Global nomfich$="Choisissez un nom pour votre fichier"
Global fi$="Le fichier "
Global aec$=" a été sauvegardé"
Global update$="Mise à jour"
Global questddl$=" est disponible, voulez-vous la télécharger maintenant ?"
Global upsave$="La mise à jour à été sauvée dans "
Global nonet$="Aucune connection internet n'est detectée"
Global Error$="Erreur"
Global ErrRep$="Désolé, un répertoire porte le même nom, choisissez un autre nom pour votre fichier."
EndIf
;-}Fin langues
Enumeration
#WIN : #Image_0 : #TXT1 : #Frame3D : #BT1 : #BT2 : #AFFICHE : #Image_Image_0 : #Fichier : #Image
#fenetre_editeur : #editeur : #BTsave : #BTcopy : #SplashWin : #SplashTxt : #Font_SplashTXT
#WINlng : #CheckBox_UK : #CheckBox_FR : #OK : #BT_MAJ
;ajouts
EndEnumeration
NewList Liste.l()
Procedure OpenWindow_SplashWin()
If OpenWindow(#SplashWin, 0, 730, 292, 30, "", #PB_Window_BorderLess|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#SplashWin))
TextGadget(#SplashTxt, 5, 5, 280, 20, wait$, #PB_Text_Center)
SetGadgetFont(#SplashTxt, LoadFont(#Font_SplashTXT, "Microsoft Sans Serif", 12, 272))
EndIf
EndIf
EndProcedure
Procedure.l 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
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_WIN()
If OpenWindow(#WIN, 330, 155, 640, 359, "ASCII2PIXEL by LDVMULTIMEDIA v"+V$, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#WIN))
TextGadget(#TXT1, 120, 335, 415, 20,Sign$)
ButtonGadget(#BT1, 20, 195, 300, 45, cv1$, #BS_FLAT)
ButtonGadget(#BT2, 20, 250, 600, 45, cv2$, #BS_FLAT)
StringGadget(#AFFICHE, 20, 305, 540, 20, convert$, #ES_CENTER|#PB_String_BorderLess|#PB_String_ReadOnly)
EndIf
EndIf
EndProcedure
OpenWindow_WIN()
;{- Event loop
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
Select EventGadget
;ENCODAGE
Case #BT1
filtre$=filtre1$
filtre=0
NomFichier$ = OpenFileRequester(loadtxt$,"",filtre$, 0)
nbc=1
ClearList(Liste())
Position=0
If 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=nbc+1
If ReadData(#Fichier,@car2,1)
nbc=nbc+1
If ReadData(#Fichier,@car3,1)
nbc=nbc+1
If ReadData(#Fichier,@car4,1)
nbc=nbc+1
EndIf
EndIf
EndIf
EndIf
nbp=nbp+1
pixel= car_pixel(car1,car2,car3,car4)
AddElement(Liste())
Liste()=pixel
Wend
CloseFile(#Fichier)
;-{ 1ere tentative de gestion de la taille des images.
; MessageRequester("test",Str(nbc)) : End ; test
If nbc<22500
Xpic=150 : Ypic = 50
; ElseIf nbc=22500 Or nbc<48000
; Xpic=320 : Ypic=50
ElseIf nbc=22500 Or nbc<144000
Xpic=320 : Ypic = 150
ElseIf nbc=144000 Or nbc<384000
Xpic=640 : Ypic = 400
ElseIf nbc=384000 Or nbc<1440000
Xpic=800 : Ypic = 600
ElseIf nbc=1440000 Or nbc<2359296
Xpic=1024 : Ypic = 768
ElseIf nbc=2359296 Or nbc<3932160
Xpic=1280 : Ypic = 1024
ElseIf nbc>3932159
MessageRequester("Alert",alert$)
Break
EndIf
;-FinModif
;-TXT en IMAGE
CreateImage(#Image,Xpic,Ypic,32)
StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_AlphaChannel)
ResetList(Liste())
For Y= 1 To Ypic-1
For x=1 To Xpic-1
NextElement(Liste())
pixel=Liste()
;Plot(x,Y,pixel)
Box(x,Y,1,1,pixel)
compteur=compteur+1
If compteur=nbp
compteur=0
Break 2
EndIf
Next x
Next Y
StopDrawing()
;- Sauvegarde
Delay(500)
SetGadgetText(#AFFICHE,wait$)
filtre$=png$
filtre=0
NomFichier$ = SaveFileRequester(savpng$, "", filtre$, 0)
ext$=LCase(GetExtensionPart(NomFichier$))
If ext$<>"png" : NomFichier$=NomFichier$+".png" : EndIf
If NomFichier$
OpenWindow_SplashWin()
Resultat = SaveImage(#Image, NomFichier$ , #PB_ImagePlugin_PNG)
SetGadgetText(#AFFICHE,over$)
CloseWindow(#SplashWin)
Else
SetGadgetText(#AFFICHE,Cancel$) ;-annul
EndIf
Else
SetGadgetText(#AFFICHE,Cancel$)
EndIf
;-IMAGE en TXT
Case #BT2
filtre$=filtre2$
filtre=0
NomFichier$ = OpenFileRequester(Loadpng$, "", filtre$, 0)
Texte$="":car_4$="":pixel=0:compteur=0
Resultat = LoadImage(#Image, NomFichier$,32)
If OpenFile(#Fichier, NomFichier$)
OpenWindow_SplashWin()
StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_AlphaChannel)
For Y=1 To ImageHeight(#Image)-1
For x=1 To ImageWidth(#Image)-1
pixel=Point(x,Y)
If pixel>0
car_4$=pixel_4car(pixel)
EndIf
If pixel=0
Break 2
EndIf
Texte$=Texte$+car_4$
Debug Texte$
Next x
Next Y
StopDrawing()
FreeImage(#Image)
;-editeur
If OpenWindow(#fenetre_editeur,330, 155, 640, 660,"Result")
CloseWindow(#SplashWin)
If CreateGadgetList(WindowID(#fenetre_editeur))
EditorGadget(#editeur,5, 5, 630, 550 )
ButtonGadget(#BTcopy, 5, 560, 630, 45, Clipb$, #BS_FLAT)
ButtonGadget(#BTsave, 5, 610, 630, 45, savtxt$, #BS_FLAT)
SendMessage_(GadgetID(#editeur), #EM_SETTARGETDEVICE, #Null, 0)
SetGadgetText(#editeur, Texte$)
EndIf
EndIf
Repeat
Event2 = WaitWindowEvent()
Select Event2
Case #PB_Event_Gadget
EventGadget = EventGadget()
Select EventGadget
Case #BTcopy
Texte$=GetGadgetText(#editeur)
SetClipboardText(Texte$)
MessageRequester("OK",clipbok$)
Case #BTsave
Texte$=GetGadgetText(#editeur)
Defaut$ = Path$
filtre$ = styl$
filtre = 0
FichierSave$ = SaveFileRequester(nomfich$, Defaut$, filtre$, filtre)
ext$=LCase(GetExtensionPart(FichierSave$))
If FichierSave$
If ext$<>"txt" : FichierSave$=FichierSave$+".txt" : EndIf
If CreateFile(1, FichierSave$)
WriteString(1, Texte$,#PB_Ascii)
CloseFile(1)
MessageRequester("Info",fi$+FichierSave$+aec$)
Else
MessageRequester (Error$,Error$)
EndIf
Else
SetGadgetText(#AFFICHE,Cancel$)
EndIf
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(#fenetre_editeur)
HideWindow(#WIN, 0)
SetGadgetText(#AFFICHE,over$)
EndSelect
Until Event2=#PB_Event_CloseWindow
Else
EndIf
EndSelect
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
Select EventWindow
Case #WIN
CloseWindow(#WIN)
Break
EndSelect
EndSelect
ForEver