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
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Ar-S a écrit :
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.
Ok, bon, a par une ligne de purecolor que tu as oublié de supprimer, j'ai essayé ton code et il ne veux pas convertir un BMP en texte ! Ou plutot : le texte est vide. Je suppose que le cadre blanc d'environ 320/200 sert d'appercu ?? Chez moi, il n'y a rien : BLANC TOTAL
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

(Désolé pour PureColor, effectivement j'ai oublié d'enlever celle de l'afficheur. Voilà qui est fait.)


Par contre je ne sais pas ce qui arrive à ton PB mais ça marche, même si il a bug au niveau de l'affichage (d'ou ce topic).

La procédure étant de d'abord convertir un .txt en .bmp hein, pas l'inverse.
http://img137.imageshack.us/img137/3420/pb01ha0.swf
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Ca detecte les ecritures dans une image BMP, C ca ??
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

C'est cette ligne là qui cause les retours automatiques de ligne. :idea:

Code : Tout sélectionner

SendMessage_(GadgetID(#editeur), #EM_SETTARGETDEVICE, #Null, 0)
Ensuite, il manque le closefile à rajouter :idea:

Code : Tout sélectionner

StopDrawing() 
FreeImage(#Image) 

CloseFile(#Fichier) ; *** (Manque le CloseFile) ***

;-editeur 
If OpenWindow(#fenetre_editeur,330, 155, 640, 660,"Result") 
Sinon cela fonctionne bien chez moi. 8)

> SPH
On remplace chaque couleur différente RGB d'un pixel par un caractère ASCII dans l'image.
On sauvegarde en image.
On lit dans l'autre sens pour retrouver les caractères ASCII.

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

Message par Ar-S »

Merci LNA.
L'oublie vient de cette version "Lite", j'ai coupé le close file par mégarde.
Par contre le SendMessage_(GadgetID(#editeur), #EM_SETTARGETDEVICE, #Null, 0) est voulu.
Je ne parle pas de ces retours à la ligne là. Le prog fonctionne sauf que si le nombre de caractères > XPIC * 3. La reconversion BMP vers TXT produit des erreurs de décalage ou de troncage des que l'on passe à la nouvelle ligne Ypic.
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Le problème viennait des variables compteur et nbc, elles ne partagent pas les mêmes unités. 8O
variable unité pixel RGB
nbc unité R ou G ou B (caractère)

Code : Tout sélectionner

compteur=compteur+1 
                
If compteur=nbc      ; Problème d'unité pixel RGB Vs R ou G ou B
  compteur=0 
  Break 2 
EndIf     
Rajout de la variable nbcar pour remplacer nbc. :idea:
nbc compte maintenant les pixels RGB.
ReadByte a été remplacé par ReadData.

Code : Tout sélectionner

        Case #BT1 
          filtre$=filtre1$ 
          filtre=0 
          NomFichier$ = OpenFileRequester(loadtxt$,"",filtre$, 0) 
          nbc=0 
          nbcar=0            ; *** rajout compteur unite R ou G ou B
          ClearList(Liste()) 
          Position=0 
          If OpenFile(#Fichier, NomFichier$) 
            
            While Eof(#Fichier)=0 
              
              car1.c=0
              car2.c=0
              car3.c=0
              
              If ReadData(#Fichier,@car1,1)
                nbcar=nbcar+1
                If ReadData(#Fichier,@car2,1) 
                  nbcar=nbcar+1
                  If ReadData(#Fichier,@car3,1) 
                    nbcar=nbcar+1
                  EndIf
                EndIf
              EndIf
              
              nbc=nbc+1
            
              pixel= car_pixel(car1,car2,car3) 
              AddElement(Liste()) 
              Liste()=pixel 
              ; car1=0:car2=0:car3=0 
            Wend 
            CloseFile(#Fichier) 
            MessageRequester("test","Nbr de caract : "+Str(nbcar))   ;-teste : le nbr de caracteres 
            
            ;-{   1ere tentative de gestion de la taille des images. 
            ; ...
            ; ...
            ; ...
Reste plus qu'à copier-coller pour essayer. Image

@ peluche
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

heu ! t'as rien oublie ?? :lol:

tu ajoute un compteur : ok

Code : Tout sélectionner

nbcar=nbcar+1
mais apres ta variable nbcar t'en fais quoi ??
peut etre un nbc=nbcar/3 ?? 8O :)
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Merci Dobro de ton intervention 8) , c'est vrai que j'aurai dû remplacer les nbc par les nbcar des formats d'allocation image [If nbc<22500 ...] :oops:

En choisissant un nom de variable plus explicite comme nbp (nombre de pixel), il n'y aura plus de confusion possible. 8)

L'erreur des retours de ligne, c'était en plus que les images commencent à 0,0 et non à 1,1 avec une longeur-1 et une hauteur-1. :wink:

Code : Tout sélectionner

        Case #BT1 
          filtre$=filtre1$ 
          filtre=0 
          NomFichier$ = OpenFileRequester(loadtxt$,"",filtre$, 0) 
          nbc=0 
          nbp=0            ; *** rajout compteur nombre de pixel
          ClearList(Liste()) 
          Position=0 
          If OpenFile(#Fichier, NomFichier$) 
            
            While Eof(#Fichier)=0 
              
              car1.c=0
              car2.c=0
              car3.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
                  EndIf
                EndIf
              EndIf
              
              nbp=nbp+1
              
              pixel= car_pixel(car1,car2,car3) 
              AddElement(Liste()) 
              Liste()=pixel 
              ; car1=0:car2=0:car3=0 
            Wend 
            CloseFile(#Fichier) 
            MessageRequester("test","Nbr de caract : "+Str(nbc))   ;-teste : le nbr de caracteres 
            
            ; nbp=nbc/3 ; à activer si nbp=nbp+1 est supprimé
            
            ;-{   1ere tentative de gestion de la taille des images. 
            
            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 
              MessageRequester("Alert",alert$) 
              Break 
            EndIf 
            ;-FinModif 
            
            CreateImage(#Image,Xpic,Ypic,24) 
            StartDrawing(ImageOutput(#Image)) 
            ResetList(Liste()) 
            
            For Y=0 To Ypic-1           ; *** les images commencent à 0,0
              For x=0 To Xpic-1         ; *** les images commencent à 0,0
                NextElement(Liste()) 
                pixel=Liste() 
                Plot(x,Y,pixel) 
                compteur=compteur+1 
                If compteur=nbp       ; *** modification nbc par nbp
                  compteur=0 
                  Break 2 
                EndIf                                
              Next x    
            Next Y    
            StopDrawing()    
            ;- Sauvegarde 
            ; ...
            ; ...
            ; ...

Code : Tout sélectionner

        Case #BT2 
          filtre$=filtre2$ 
          filtre=0 
          NomFichier$ = OpenFileRequester(Loadbmp$, "", filtre$, 0) 
          Texte$="":car_3$="":pixel=0:compteur=0 
          Resultat = LoadImage(#Image, NomFichier$) 
          If OpenFile(#Fichier, NomFichier$) 
            StartDrawing(ImageOutput(#Image)) 
            For Y=0 To ImageHeight(#Image)-1           ; *** les images commencent à 0,0
              For x=0 To  ImageWidth(#Image)-1         ; *** les images commencent à 0,0
                pixel=Point(x,Y) 
                If pixel>0 
                  car_3$=pixel_3car(pixel) 
                EndIf 
                If pixel=0 
                  Break 2 
                EndIf 
                Texte$=Texte$+car_3$ 
              Next x      
            Next Y 
            StopDrawing() 
            FreeImage(#Image) 
            CloseFile(#Fichier) 
            ;-editeur 
            ; ...
            ; ...
            ; ...
@ peluche
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

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

Message par Ar-S »

rahhhh LNA, quelle joie de découvrir ce topic !
Je vais m'empresser d'essayer.
Cette histoire de 0 à ... au lieu de 1 à .... m'a toujours saoulé en informatique. Que ce soit pour 255 => de 0 à 254 ou le reste.

En tout cas un grand merci à toi.
Et à toi aussi mon Dobro.

----Edit----

ça marche au poil !
Encore merci
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Voilà voilà la version terminée.
J'ai corrigé pas mal d'autres choses par rapport aux langues et à la mise à jour.

Vous pouvez tester la version finale ICI
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je viens de trouver mon probleme avec la librairie PureColor

j'utilisais la mise a jour automatique de Gnozal a travers son prg LibraryUpdater , mais ce logiciel récupère les version pour purebasic 3.94 ou bien purebasic 4.00

mais pas la version purebasic 4.10 !! , du coup la version que j'avais était la version 4.00 , alors que j'aurai du avoir la 4.10 :?
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Dobro a écrit :je viens de trouver mon probleme avec la librairie PureColor

j'utilisais la mise a jour automatique de Gnozal a travers son prg LibraryUpdater , mais ce logiciel récupère les version pour purebasic 3.94 ou bien purebasic 4.00

mais pas la version purebasic 4.10 !! , du coup la version que j'avais était la version 4.00 , alors que j'aurai du avoir la 4.10 :?
Je ne l'ai pas mis à jour depuis longtemps cet outil là !
Je vérifie :
0. Je le télécharge de mon site [LibraryUpdater.exe 77 372 15/06/07 11:58 -a--].
1. Je coche [x] UserLibraries et [x] PB4.1x (tout le reste est décoché)
2. J'appuie sur 'On line check'
3. J'ai une liste des librairies pour 4.xx ou 4.1x
4. Je télécharge PureCOLOR for PB4.1x
5. C'est bien la bonne version : archive 'PureCOLOR__.zip' contenant 'PureCOLOR-PB410-Installer.exe'
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

mais pourquoi n'avais-je pas vu la coche V4.10 ??? 8O 8O 8O

c'est pas cool de faire des application avec des Coche qui n'apparaissent qu'aux yeux des innocents ... :lol: :lol:

Image

et lorsqu'elle apparait par magie

Image
rien n'indique qu'on recupere bien la version 4.10 !!

bref ! bon utilitaire, mais pas tres clair !! :)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Nouveaux soucis - Texte => Pixels => Texte - erreurs

Message par Ar-S »

Évolution oblige, je déterre ce topic pour vous signaler une évolution dans ASCII2PIXL.
Jusqu'ici il utilisait les couleurs de chaque pixel pour 3 caractères. PB ayant maintenant adopté la gestion de la couche alpha, je me suis dit
Plutôt que de faire 1pixel=3 caractères, je veux le 1pixl=4 caractères ! 8)
Une image 320x240 pourrait contenir 307 200 caractères au lieu de 230 400 pour la version actuelle, ce n'est pas négligeable.

RGB(car1,car2,car3) deviendrait RGBA(car1,car2,car3,car4)

Mais voilà, j'ai un bug que je n'arrive pas à identifier.
Je n'arrive pas à voir si c'est à la création de l'image que ça chie ou si c'est lors de son décodage.
Dans l'un des 2 cas, la couche alpha est zappée car le texte restitué est tronqué d'un caractère tous le 4.

Code : Tout sélectionner

;Les procédures que j'ai modifié pour passer à 4 car par pixel
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 

;(....)

La création d'une image à partir d'un fichier txt

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)
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)
                  compteur=compteur+1
                  If compteur=nbp
                    compteur=0
                    Break 2
                  EndIf                               
                Next x   
              Next Y   
            StopDrawing() 


; Le décodage d'une image
;-IMAGE en TXT
          filtre$=filtre2$
          filtre=0
          NomFichier$ = OpenFileRequester(Loadpng$, "", filtre$, 0)
          Texte$="":car_3$="":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_3$=pixel_4car(pixel)
                  EndIf 
                  If pixel=0 
                    Break 2 
                  EndIf
                  Texte$=Texte$+car_3$ 
                Next x     
              Next Y 
            StopDrawing()
            FreeImage(#Image)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre