Premiers pas...
Publié : jeu. 03/févr./2005 13:01
Soyez indulgents, il y a une masse d'info énormes à intégrer quand on débarque 
En tout cas le PureB a l'air de foncer
Je n'ai pas réussi à écrire des If else endif sur une seule ligne, c'est normal ? Le compilateur n'a accepté que qu'en je les ai "dépliées"
Je pense que j'aurai dû utiliser des procédures au lieu de gosub ?
Enfin c'est un petit peu dur de s'y remettre après une quinzaines d'années
Si vous voyez des trucs lourds, des améliorations, n'hésitez pas !

En tout cas le PureB a l'air de foncer

Je n'ai pas réussi à écrire des If else endif sur une seule ligne, c'est normal ? Le compilateur n'a accepté que qu'en je les ai "dépliées"
Je pense que j'aurai dû utiliser des procédures au lieu de gosub ?
Enfin c'est un petit peu dur de s'y remettre après une quinzaines d'années

Si vous voyez des trucs lourds, des améliorations, n'hésitez pas !
Code : Tout sélectionner
; Petit délire Pychadélique dont Dobro m'a dit qu'il avait un nom !
; "Les taches de Martin", moi je n'en savait rien, Pure hasard, on nous cache tout !
; Grosso modo on fait une moyenne des couleurs autour d'un pixel considéré
; que l'on remet dans ce pixel et on recommence :)
#dobro=1 ; gestion des sprites aimablement expliquée par Dobro
#Police=1
#Sprite=1
spr=1
Dim ecran(640,480)
For x = 0 To 639 ; un écran de couleurs aléatoires
For y = 0 To 479
r=Random(255)
g=Random(255)
b=Random(255)
c=RGB(r,g,b) ;Couleur du pixel
ecran(x,y)= c
Next y
Next x
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = 600 ;=largeur de l'ecran
EcranY = 480;=hauteur de l'ecran
WindowID = OpenWindow(1, 0, 0, 640, 480, #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "Move the mouse slowly in any direction :)")
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, 640, 480, 1, 0,0)
CreateSprite(1, 640, 480) ; cree 1 sprites qui sert d'ecran 1
CreateSprite(2, 640, 480) ; cree 1 sprites qui sert d'ecran 2
Repeat ;Boucle principale
Event=WindowEvent()
GetCursorPos_(CursorPos.POINT) ; position de la souris
MouseX = CursorPos\x
MouseY = CursorPos\y
If xt <> MouseX ; test pour influer la variable m (la moyenne)
If xt> MouseX
m = m-1
Else
m = m+1
EndIf
EndIf
If yt <> MouseY ; test pour influer la variable s (le seuil)
If yt> MouseY
s = s-1
Else
s = s+1
EndIf
EndIf
xt=MouseX ; on met en la position de la souris en tampon
yt= MouseY ;
StartDrawing(SpriteOutput(spr) ) ; on dessine dedans
; trace à l'ecran et test pour avoir une image "torique"
For x = 1 To 638 ; lignes intérieures
For y = 1 To 478 ;genre de moyenne de couleur autour du pixel considéré
c=ecran(x-1,y) + ecran(x+1,y) + ecran(x,y-1) + ecran(x,y+1)
Gosub t_race
Next y
Next x
For x = 1 To 638 ;ligne x 0
c=ecran(x-1,0) + ecran(x+1,0) + ecran(x,1) + ecran(x,479)
y=0
Gosub t_race
Next x
For x = 1 To 638 ;ligne x 479
c=ecran(x-1,479) + ecran(x+1,479) + ecran(x,1) + ecran(x,478)
y=479
Gosub t_race
Next x
For y = 1 To 478 ;colonne 0 y
c=ecran(639,y) + ecran(1,y) + ecran(0,y-1) + ecran(0,y+1)
x= 0
Gosub t_race
Next y
For y = 1 To 478 ;colonne 639 y
c=ecran(638,y) + ecran(0,y) + ecran(639,y-1) + ecran(639,y+1)
x= 639
Gosub t_race
Next y
;Les 4 coins
c=ecran(639,0) + ecran(1,0) + ecran(0,479) + ecran(0,1)
x=0
y=0
Gosub t_race
c=ecran(639,479) + ecran(1,479) + ecran(0,478) + ecran(0,0)
x=0
y=479
Gosub t_race
c=ecran(638,0) + ecran(0,0) + ecran(639,479) + ecran(639,1)
x=639
y=0
Gosub t_race
c=ecran(638,479) + ecran(0,479) + ecran(639,478) + ecran(639,0)
x=639
y=479
Gosub t_race
StopDrawing()
spr=spr+1
If spr>2
spr=1
EndIf
DisplaySprite(spr, 0, 0)
FlipBuffers():; affiche l'ecran
ClearScreen(0, 0, 0) :;efface l'ecran
Until Event=#PB_Event_CloseWindow
End
t_race :
If m <4 ; test d'un genre de moyenne de couleur autour du pixel considéré
m = 4
EndIf
If m>40 ; moyenne haute fixée arbitrairement
m=20
EndIf
If s <0 ; seuil de valeur de couleurs défini arbitrairement
s = 1
EndIf
If s>10000
s=10000
EndIf
; c est la couleur finale du pixel
c=c/m ;Genre de moyenne de couleurs des 4 voisins du pixel considéré
; s est le seuil
;C'est la moyenne et le seuil qui déterminent ces genres d'images totalement différentes!
If c<s
c=RGB(125,125,125) ;Si la moyenne de couleurs dépasse un seuil on la normalise
EndIf
ecran(x,y)=c ; nouvelle couleur dans un tableau de l'image
Plot(x,y,c) ; on affiche le pixel avec la nouvelle couleur
Return