Page 2 sur 5
Publié : mar. 06/mai/2008 6:51
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
Publié : mar. 06/mai/2008 9:50
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
Publié : mar. 06/mai/2008 10:29
par SPH
Ca detecte les ecritures dans une image BMP, C ca ??
Publié : mar. 06/mai/2008 10:35
par Lna
C'est cette ligne là qui cause les retours automatiques de ligne.
Code : Tout sélectionner
SendMessage_(GadgetID(#editeur), #EM_SETTARGETDEVICE, #Null, 0)
Ensuite, il manque le closefile à rajouter
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.
> 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
Publié : mar. 06/mai/2008 15:25
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.
Publié : sam. 10/mai/2008 6:40
par Lna
Le problème viennait des variables compteur et nbc, elles ne partagent pas les mêmes unités.
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.
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.
@ peluche
Publié : sam. 10/mai/2008 7:45
par Backup
heu ! t'as rien oublie ??
tu ajoute un compteur : ok
mais apres ta variable nbcar t'en fais quoi ??
peut etre un nbc=nbcar/3 ??

Publié : sam. 10/mai/2008 9:27
par Lna
Merci Dobro de ton intervention

, c'est vrai que j'aurai dû remplacer les nbc par les nbcar des formats d'allocation image [If nbc<22500 ...]
En choisissant un nom de variable plus explicite comme nbp (nombre de pixel), il n'y aura plus de confusion possible.
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.
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
Publié : sam. 10/mai/2008 11:37
par Backup
Merci

Publié : sam. 10/mai/2008 16:24
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
Publié : sam. 10/mai/2008 17:46
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
Publié : sam. 10/mai/2008 17:54
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

Publié : dim. 11/mai/2008 15:46
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'
Publié : dim. 11/mai/2008 16:37
par Backup
Nouveaux soucis - Texte => Pixels => Texte - erreurs
Publié : mar. 23/mars/2010 21:29
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 !
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)