Page 1 sur 1

Premiers pas...

Publié : jeu. 03/févr./2005 13:01
par Frenchy Pilou
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 8)
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 :roll:
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

Publié : jeu. 03/févr./2005 17:26
par Oliv
Je ne voit toujours pas la Joconde :P
Pour écrire plusieurs instructions sur une ligne il faut mettre ":"

Code : Tout sélectionner

If a=b : debug "Egal" : EndIf
Repeat : ForEver

Publié : jeu. 03/févr./2005 19:51
par Frenchy Pilou
Dans celui-là aucune chance :)
Ce n'était pas le but, mais bientôt je vais me rapprocher du sujet :)
Pour les : j'ai bien vu que c'était cela qu'il fallait !

Code : Tout sélectionner

If yt> MouseY : s = s-10 :Else: s = s+10 : EndIf
Ca marche !
J'en avais oublié un :roll:
Merci!

Publié : jeu. 03/févr./2005 23:32
par Le Soldat Inconnu
c'est vrai que l'effet est rigolo :)