Texte => Pixels => Texte - erreurs (A nouveau)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Texte => Pixels => Texte - erreurs (A nouveau)

Message par Ar-S »

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.

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
Tout aide sera la bienvenue car là je désespère.
Dernière modification par Ar-S le mer. 24/mars/2010 12:03, modifié 10 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bizarre ! quelque soit l'exemple ton archive du MP ou ce code, j'ai un polink error ... :?
je peux meme pas le compiller !

tu utilise 4.10 ? tu utilise une lib externe ?
ça me met que ça arrive pas resoudre a le symbole PB_getgadgetitemtext !!
:?

de toute façon je suis sur que le problem viens de ton

Code : Tout sélectionner

If nbc<22500
							Xpic=150 : 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
Anonyme

Message par Anonyme »

Aïe Aïe , c'est prise de tête , je te propose de changer de codage complement , cherche perceptron sur google. :D
C'est une voie qui peut être très intéresante.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bon c'est PURECOLOR qui cree le problem de polink !! pFFF pourtant j'ai la derniere version !! :?

je vais pouvoir regarder :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

j'ai trouvé !! :D

remplace tout ttes test par

Code : Tout sélectionner

Xpic=1280 : Ypic = 1024
en clair quelque soit la taille du text tu genere une image de 1280x1024
(qui peut le plus peu le moins !! ) :D

ps; ça venais bien de ça :lol:
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Ok ça fonctionne (merci) mais vient la grande question.
Pourquoi ???

L'image que je génère avec mon code est censée pouvoir contenir bien plus de caractères que la source texte, alors pourquoi ça chie avec une 150x120 par exemple ??
Vraiment j'aimerai comprendre.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Je crois avoir un élément de réponse à mon pourquoi..
en fait, le code marche en 1280 x 1024 avec le txt que je t'avais filé car tout est inscrit sur la 1ere ligne (qui peut tout de même contenir 3840 caractères)
Si on met un txt avec 29000 caractères, ça refoire.

J'ai testé en duplicant le contenenu du txt plusieurs fois.

Donc le soucis viens du passage aux lignes suivantes dans la proce.

Qu'en pensez vous ?

@Cpl.Bator, => pinaise j'ai pas compris grand chose au perceptron, je vais tout de même m'y pencher par curiosité.
Anonyme

Message par Anonyme »

le perceptron c'est un programme capable de reconnaitre des formes par l'apprentissage , càd que ton programme apprend au fur & a mesure de son exécution, c'est basé sur un système neuronal.

:wink:
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Cpl.Bator a écrit :le perceptron c'est un programme capable de reconnaitre des formes par l'apprentissage , càd que ton programme apprend au fur & a mesure de son exécution, c'est basé sur un système neuronal.

:wink:
Heu oui mais là non :) moi je veux juste un pitit soft de conversion tout bête qui transforme 3 caracteres en pixel et passe au pixel suivant.
J'ai vu ce qui arrive quand on joue trop à rendre les ordi intelligents (Tron, terminato, wargames... :P :P :P ) Non à Skynet ! :wink:
Anonyme

Message par Anonyme »

terminato
C'est la version Espagnole de Terminator ? :D
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Petit correctif pour le nombre de caractères :

Code : Tout sélectionner

nbc=0
ClearList(Liste()) 
Position=0 
If OpenFile(#Fichier, NomFichier$) 
If OpenFile(#Fichier, NomFichier$)
While Eof(#Fichier)=0 
car1=ReadByte(#Fichier)&255
nbc=nbc+1
car2=ReadByte(#Fichier)&255
nbc=nbc+1
car3=ReadByte(#Fichier)&255
nbc=nbc+1
pixel= car_pixel(car1,car2,car3)
AddElement(Liste())
Liste()=pixel
car1=0:car2=0:car3=0
Wend
Par contre le problème lors du retour à la ligne demeure.
:cry: :cry: :cry: :cry: :cry: :cry:
didier69
Messages : 61
Inscription : mer. 30/avr./2008 12:50
Localisation : Villeurbanne (Lyon)

Message par didier69 »

J'ai voulu tester ton programme et j'ai eu une erreur ligne 7
(manque un " en fin) et maintenant ligne 174:

Code : Tout sélectionner

					Case #BT2

Code : Tout sélectionner

'Case' without 'Select'.
Je ne vois pas ce que je dois modifier pour que cela
fonctionne.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Salut Didier,
j'ai corrigé ;)
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Erreur ligne 74

purecolor is not a fonction, blablablablabla....
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

SPH a écrit :Erreur ligne 74

purecolor is not a fonction, blablablablabla....
Peut-être que tu n'utilises pas purecolor...
Chez moi le code marche.

En tout cas j'ai supprimé les appels à PColor, pas besoin pour cette version.
Répondre