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 TOTALAr-S a écrit :Peut-être que tu n'utilises pas purecolor...SPH a écrit :Erreur ligne 74
purecolor is not a fonction, blablablablabla....
Chez moi le code marche.
En tout cas j'ai supprimé les appels à PColor, pas besoin pour cette version.
Texte => Pixels => Texte - erreurs (A nouveau)
(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
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
C'est cette ligne là qui cause les retours automatiques de ligne.
Ensuite, il manque le closefile à rajouter
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

Code : Tout sélectionner
SendMessage_(GadgetID(#editeur), #EM_SETTARGETDEVICE, #Null, 0)

Code : Tout sélectionner
StopDrawing()
FreeImage(#Image)
CloseFile(#Fichier) ; *** (Manque le CloseFile) ***
;-editeur
If OpenWindow(#fenetre_editeur,330, 155, 640, 660,"Result")

> 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
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.
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.
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)
Rajout de la variable nbcar pour remplacer nbc.
nbc compte maintenant les pixels RGB.
ReadByte a été remplacé par ReadData.
Reste plus qu'à copier-coller pour essayer.
@ peluche

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

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.
; ...
; ...
; ...

@ peluche
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 ??


tu ajoute un compteur : ok
Code : Tout sélectionner
nbcar=nbcar+1
peut etre un nbc=nbcar/3 ??


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.
@ peluche


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
; ...
; ...
; ...
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
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
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
J'ai corrigé pas mal d'autres choses par rapport aux langues et à la mise à jour.
Vous pouvez tester la version finale ICI
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
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à !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 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'
Nouveaux soucis - Texte => Pixels => Texte - erreurs
É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.
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)
~~~~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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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