Autorisation : Membre
Nb de messages : 891
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Ven 20 Juil 2007, 13:15
Hier je m'ennuyais alors j'ai fais rapidement un petit programme sympa.
Je compte le développer évidemment, ce n'est que la version béta à l'état embryonnaire, mais je la mets quand même. Comme ça, vous pourrez donenez des suggestions ou me dire pourquoi ça ne marche pas (je sais ça ne reconstitue pas comme il faut mais c'est un tout petit rien que je ne vois pas )
Je pense par exemple rajouter un truc pour délimiter l'espace à sauvegarder.
If L.:Then
0->L.A(1)
0->L.B(1)
0->L.C(1)
0->L.D(1)
0->L.E(1)
0->L.F(1)
0->L.
End
Repeat getKey
For(I,1,5
Output(3,I," PROGRAMME
33!
Output(5,16-2I,"CREE PAR
End
Output(7,7,"COC5
For(I,1,100
End
ClrHome
End
Goto 0
Lbl 3
Output(1,8," or
Output(1,6,"InF
Output(1,10,"s
Output(3,5," or
Output(3,1,"Ce pr
Output(3,7,"GraMMe permet de numériser une image puis de la recréer a l'écran.
Pause
For(I,3,7
Output(I,1,"
End
Output(7,3," or
Output(3,1,"Numérisez en simple sauf en cas d'images ayant de n
Output(7,5,"Mbreuses alternances
Pause
ClrHome
Output(4,4, or
Output(4,1,"Me J
Output(4,6,"Indre :
Output(5,6," or
Output(5,6,"C
Output(5,8,"cL.Free.Fr
Pause
CLtHOMe
Lbl 0
Menu("IMAGEL.","DENUMERISER",1,"NUMERISER",2,"INFOS",3,"QUITTER",A
Lbl A:Stop
Lbl 1
Output(1,6," or
Output(1,3,"Dest
Output(1,8,"cKer
3->A
1->O
Lbl 6
not(O)->O
If not(O
Then
Output(3,8,"L
Output(4,8,"L`
Output(5,8,"Lf
Output(6,8,"L"
Output(7,8,"L...
Output(8,8,"L+
If O:Then
Output(3,8,"L.A
Output(3,8,"L.B
Output(3,8,"L.C
Output(3,8,"L.D
Output(3,8,"L.E
Output(3,8,"L.F
Output(3,8,"L.G
End
Repeat K=105
getKey->K
A->C
If K=25:A-1->A
If K=34:A+1->A
If A=2 or A=15:10not(A-15)+3->A
If A=9 and not(O) or A=8 and O
Goto 6
If AøC:Then
Output(C-6O,6,"
Output(C-6O,11,"
Output(A-6O,6,"*
Output(A-6O,11,"*
End
End
If A=3:L->L.NUM
If A=4:L`->L.NUM
If A=5:Lf->L.NUM
If A=6:L"->L.NUM
If A=7:L...->L.NUM
If A=8:L+->L.NUM
If A=9:L.A->L.NUM
If A=10:L.B->L.NUM
If A=11:L.C->L.NUM
If A=12:L.D->L.NUM
If A=13:L.E->L.NUM
If A=14:L.F->L.NUM
1->A:1->B:1->N
10->M
If L.NUM(1)=-1:Goto 5
Repeat A=94 and B=62
A+1->A
If A=95:Then
1->A
1+B->B
End
1+M->M
If M=13
Then
1->M
N+1->N
End
If int(10fPart(10^(M)L.NUM(N)=1:Pxl-On(B,A
End
CLrLIst L.NUM
Goto 0
Lbl 5
0->D
Repeat A=94 and B=62 and GetKeY
A+1->A
If A=95:Then
1->A
1+B->B
End
If M=14
Then
1->M
N+1->N
End
If L.NUM(N)>1 or D=1:Then
1->D
If L.NUM(N)=0:Then
1+N->N
2->M:0->D
End
L.NUM(N)-1->L.NUM(N)
If int(10fPart(L.NUM(N+1)))=1:Pxl-On(B,A
Else
If int(10fPart(10^(M)L.NUM(N)))=1:PXL-On(B,A
If int(10fPart(10^(M)L.NUM(N)))>1:N+1->N
M+1->M
End
End
ClrList L.NUM
Goto 0
Lbl 2
Menu("NUMERISER","IMG SIMPLE",S,"IMG CONTRASTE",C
Lbl C
0->L.DNU(1)
1->A:1->B:1->N:ClrHome
.1->M
Output(7,1,"APPUYEZ SUR UNE
Output(8,1,"POUR ARRETER
Repeat A=94 and B=62 or GetKeY
Output(5,1+int((94B-94+A)/389),"=
int((94B-94+A)/5.828)/10
Output(2,8,"
Output(2,8,Ans
A+1->A
If A=95:Then
1->A
1+B->B
End
.1M->M
If M=10^(-14):Then
.1->M
N+1->N
0->L.DNU(N)
End
Mpxl-Test(B,A)+L.DNU(N)->L.DNU(N
End
Goto 9
Lbl S
ClrList L.NUM
-1->L.NUM(1)
1->A:1->B:0->U
2->N:0->M
pxl-Test(1,1)->L
Output(7,1,"APPUYEZ SUR UNE
Output(8,1,"POUR ARRETER
Repeat A=94 and B=62 or getkey
Output(2,8,"
Output(2,8,.1int((94B-94+A)/5.828)
A+1->A
If A=95:Then
B+1->B
1->A
End
L->J
pxl-Test(B,A)->L
U+1->U
If LøJ:Then
If U=1:M+1->M
If M=14 or Uø1:Then
N+1->N
0->L.NUM(N)
M->G
1->M
End
If U=L:10^(-M)+L.NUM(N)->L.NUM(N)
If Uø1:Then
210^(-G)+L.NUM(N-1)->L.NUM(N-1)
U->L.NUM(N)
N+1->N
J->L.NUM(N)
End
0->U
End
End
Lbl 9
ClrHome
Output(1,4," or
Output(1,3,"St
Output(1,6,"cKer dans
3->A
1->O
Lbl 7
not(O)->O
If not(O
Then
Output(3,8,"L1
Output(4,8,"L2
Output(5,8,"L3
Output(6,8,"L4
Output(7,8,"L5
Output(8,8,"L6
If O:Then
Output(3,8,"L.A
Output(3,8,"L.B
Output(3,8,"L.C
Output(3,8,"L.D
Output(3,8,"L.E
Output(3,8,"L.F
Output(3,8,"L.G
End
Repeat K=105
getKey->K
A->C
If K=25:A-1->A
If K=34:A+1->A
If A=2 or A=14:10not(A-2)+3->A
If A=9 and not(O) or A=8 and O
Goto 7
If AøC:Then
Output(C-6O,6,"
Output(C-6O,11,"
Output(A-6O,6,"*
Output(A-6O,11,"*
End
End
If A=3:L.DNU->L
If A=4:L.DNU->L`
If A=5:L.DNU->Lf
If A=6:L.DNU->L"
If A=7:L.DNU->L...
If A=8:L.DNU->L+
If A=9:L.DNU->L.A
If A=10:L.DNU->L.B
If A=11:L.DNU->L.C
If A=12:L.DNU->L.D
If A=13:L.DNU->L.E
If A=14:L.DNU->L.F
ClrList L.DNU
Goto 0
Autorisation : Membre
Nb de messages : 595
Inscrit le : Mer 04 Avr 2007, 13:29
Posté le : Ven 20 Juil 2007, 21:11
J'ai cru comprendre que le principe correspondait à mon programme scannaire, mais en mieux. Par contre, est-ce que tu pourrais expliquer comment ca fonctionne (dans les grandes lignes), et comment on l'utilise ?
---------------------- Vive la programmation et vive le vibraphone !!!
Autorisation : Membre
Nb de messages : 891
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Sam 21 Juil 2007, 12:18
Pour commencer, tu t'arrange pour avoir quelque chose sur l'écran graphique ( à moins que tu ne souhaites enregistrer un écran blanc^^ ). Tu dessines un truc quoi.
Tu lance le programme, puis tu choisis numériser. Dès lors, ce programme va pour chaque pixel identifier s'il est "allumé" ou non (Pxl-test). S'il est éteint il enregistre un 0 sinon un 1.
Jusqu'ici c'était facil. Vient ensuite le problème de stockage. J'ai utilisé la technique de stockage de Ratuss couplé avec un amélioration de liste. Ce qui revient quand même, pour une image format maximum, à 4ko.
Les nombres se stockent dans une liste provisoire appellé L.NUM, qui se transfera dans la liste choisi/souhaitée. Pour dénumériser, c'est la même chose, dans l'autre sens, si 1 faire Point on.
J'ai d'ailleurs une idée pour réduire le stockage à environ 3000 octets, mais ce sera plus compliqué. Pour l'instant, j'ai juste un problème que je n'arrive pas à résoudre.
Autorisation : Membre
Nb de messages : 595
Inscrit le : Mer 04 Avr 2007, 13:29
Posté le : Sam 21 Juil 2007, 15:20
Oui, donc c'est bien un programme comme je l'avais fais, mais apparemment le tien est beaucoup mieux. Bravo.
par contre, serait-il possible de remplacer les
Code
∟
par les commandes réelles stp ?
---------------------- Vive la programmation et vive le vibraphone !!!
Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Sam 21 Juil 2007, 18:06
Simple à faire pour les 0 où pour les 1.
Mais les deux entreront en conflits: commen savoir si c'est un 1 ou un 0.
A mon avis donc, mieux vaut avoir un seul numéros compressé (et je pense qu'il vaut mieux le 0).
Au passage, cette méthode est le principe des faxs actuels.
Autorisation : Administrateur
Nb de messages : 792
Inscrit le : Mer 18 Aoû 2004, 22:13
Posté le : Sam 21 Juil 2007, 18:25
Voilà l'algo :
Si chiffre_courant = 0 ou 1 => le réécrire
si chiffre_courant >1
=> on le stock dans n
=> chiffre_courant=chiffre_courant+1
=> on lit le chiffre_courant
=> Pour x allant de 1 à n
=>=> réécrire chiffre_courant
chiffre_courant=chiffre_courant+1
revenir en haut et poursuivre jusqu'à la fin des données
Autorisation : Membre
Nb de messages : 891
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Dim 22 Juil 2007, 12:37
Zut je savais pasque les Ti82 n'en avais pas la possiblité... Bas sinon tu peux toujours remplacer par des listes déjà existantes, tu auras juste moins de possibilités de stockage, c'est tout...
Sinon le modèle de numérisation que j'aais proposé ne marche pas en faîte car le programme ne pourra pas distinguer un "91-0 d'un "9-1 0". Donc j'ai presque terminé une autre manière, je la mettrais tout à l'heure.
Autorisation : Administrateur
Nb de messages : 792
Inscrit le : Mer 18 Aoû 2004, 22:13
Posté le : Dim 22 Juil 2007, 15:14
Citer : coc5
Sinon le modèle de numérisation que j'aais proposé ne marche pas en faîte car le programme ne pourra pas distinguer un "91-0 d'un "9-1 0". Donc j'ai presque terminé une autre manière, je la mettrais tout à l'heure.
Très juste. Il suffit soit de se limiter à 9 soit de faire une matrice (ou 2 listes)