Texte => Pixels => Texte - erreurs (A nouveau)
Publié : dim. 04/mai/2008 15:58
Mise à Jour 24/03/2010
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.
Tout aide sera la bienvenue car là je désespère.
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