Barbouille

Programmation d'applications complexes
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

Code mise a jour :)

ça ne devrai plus planter ... le plantage intempestif arrivait pendant le dessin , si on allait au bords de l'ecran :roll:

ps: c'est vrais que cette histoire de decalage nous empeche de dessiner sur les bords de l'ecran ! :?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

code mis a jour , le probleme de dessin sur les bords d'image est reglé :)

@Cederavick , faut que je regarde comment fonctionne ton stle , j'arrive pas a le faire bosser en mode "dessin a la main"
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

bon ce qui met le bazard avec le decalage de la souris et du dessin , viens du RedimensionnementAuto de l'openWindowedScreen !

on resoud le probleme en empechant la redimention, et en affectant un offset

je viens de modifier le code en ce sens ... chez moi ça marche ...

alors certains vont raler a cause de la résolution qui va etre trop grande :lol:

il faut faire tourner le prg avec une résolution Supérieur a 1024x768 ...
ce qui de nos jour est courant ... sauf sur les Netbook ... là , je regrette ... :?

Fred a oublier de nous fournir une Fonction qui calcul l'offset du curseur Graphique sur un Ecran en fenetre qui se redimensionne avec la fenetre ..
tout se redimentionne Sauf , le Pas de deplacement de la souris , qui lui reste constant , du coup on perd la possibilité de dessiner sur un ecran
en Fenetre avec redimensionnement automatique .... .. c'est quand meme un probleme ...

pour le moment, je vais laisser en dimention Fixe , ça me simplifie la chose :)


exemple de melange de style (c'est pas forcement tres heureux en fait d'avoir essayé de tout mettre)...

image d'origine ( ce n'est pas mon chien .. )
Image


Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

j'ai ajouté un mode Semi-automatique

il permet grace a une case a cocher de passer en mode Semi-auto

on choisi un style
on defini le nombre de coup de pinceau
la taille x et y du pinceau
et on utilise le bouton Draw (meme a plusieurs reprises )
on peut évidement changer de Style entre 2 appuis sur Draw :)
ce qui permet des mélanges


le code ne tiens plus sur le Forum , j'ai crée une archive avec le prg compilé , et le source
le lien est dispo en page 1 de ce topic :)
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Pure_Autopaint

Message par blendman »

vas-y Dobro, t'arrêtes pas, t'assures grave !! :D

J'ai fait ce petit test (un mode "brosse floue"), si cela t'intéresse, tu peux l'intégrer à ton code ;)
y'a un 2ème test "Pointillisme flou", mais je ne sais pas si c'est intéressant

Code : Tout sélectionner

;{ *** initialisations/Declarations**
UsePNGImageDecoder():UseJPEGImageDecoder()
UsePNGImageEncoder()

Enumeration ; Window
  #window
EndEnumeration

Enumeration ; Gadget
  #bouton_dessin
  #bouton_efface
  #bouton_charge_image
  #Gadget_text
  #bouton_Sauve
  #Gadget_scroll
  #Gadget_titre
  #Gadget_auteur
  #Gadget_list_style
  #Gadget_text_style
  #Gadget_list_codeur
  #Gadget_text_codeur
EndEnumeration

Enumeration ; Sprite
  #Pinceau
  #Pinceau3D
EndEnumeration
Enumeration ; Images
  #image_reference
  #image_Sortie
EndEnumeration
Enumeration ; Fonte
  #Font_Window_Text_titre
  #Font_Window_Auteur
  #Font_Window_Text_style
  #Font_Window_Text_codeur
EndEnumeration

Global File_image$,Phase,Style
Global larg_fenetre=800
Global haut_fenetre=600
Global x_image_origine
Global y_image_origine
Global Flag_bouton_on
Global Brush_Alpha.a = 150

;-Declarations
;-** declaration style
Declare  INIT(largeur,Hauteur, Array image_tab(2))
Declare  Expressionnisme1(largeur,Hauteur,Array image_tab(2))
Declare  croix(Largeur,Hauteur,Array image_tab(2))
Declare  vermicelle(Largeur,Hauteur,Array image_tab(2))
Declare  croix2(Largeur,Hauteur,Array image_tab(2))
Declare  pointillism(largeur,Hauteur,Array image_tab(2))
Declare  pointillism2(largeur,Hauteur,Array image_tab(2))
Declare  aquarelle(largeur,Hauteur,Array image_tab(2))
Declare  Pop_art(largeur,Hauteur,Array image_tab(2))
Declare  Flocon(largeur,Hauteur,Array image_tab(2))
Declare  cederavic(Largeur,Hauteur,Array image_tab(2))
Declare  BrosseFloue(Largeur, HAuteur, Array image_tab(2))

Declare  peint_impres(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
Declare  peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2)) ; le Pinceau Croix
Declare  peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2)) ; le Pinceau Croix
Declare  peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2)) ; le pinceau Croix2
Declare  peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
Declare  peint_pointillism2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
Declare  peint_aquarelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
Declare  peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
Declare  peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
Declare  peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2)) ; le pinceau Cederavic
Declare  peint_BrosseFloue(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))

Declare  Write_preference()
Declare  Read_preference()
Declare  MyWindowCallback(WindowID, Message, wParam, lParam)



Global lpPoint.POINT ,xx_mouse,yy_mouse


;} ***********************************************************************

;{ open window
Read_preference()

If OpenWindow(#window,win_x,win_y,larg_fenetre,haut_fenetre,"", #PB_Window_SystemMenu |#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
  ; Déclarez les gadgets ici...
  Global y_bouton=90 : Global x_bouton=10
  ButtonGadget(#bouton_charge_image, x_bouton, y_bouton, 150, 30, "Load_image")
  
  TextGadget(#Gadget_text_style, x_bouton, y_bouton+60, 150, 40, "Styles" )
  SetGadgetFont(#Gadget_text_style, LoadFont(#Font_Window_Text_style, "Comic Sans MS", 10, 16))
  ListViewGadget(#Gadget_list_style,x_bouton,y_bouton+90,180, 200 )
  
  ButtonGadget(#bouton_dessin, x_bouton, y_bouton+420, 100, 30, "Draw")
  ProgressBarGadget(#Gadget_scroll, x_bouton, y_bouton+450, 150,30, 0, 100)
  
  ButtonGadget(#bouton_efface, x_bouton, y_bouton+510, 100, 30, "Clean")
  ButtonGadget(#bouton_Sauve, x_bouton, y_bouton+540, 100, 30, "Save_image")
  TextGadget(#Gadget_text, x_bouton, y_bouton+480, 150, 30, "" )
  
  TextGadget(#Gadget_titre, x_bouton+500, 5, 300, 40, "Pure AutoPaint" )
  SetGadgetFont(#Gadget_titre, LoadFont(#Font_Window_Text_titre, "Comic Sans MS", 20, 16))
  
  TextGadget(#Gadget_text_codeur, x_bouton, 5, 150, 40, "Les Codeurs" )
  SetGadgetFont(#Gadget_text_codeur, LoadFont(#Font_Window_Text_codeur, "Comic Sans MS", 10, 16))
  ComboBoxGadget(#Gadget_list_codeur,x_bouton+150, 5, 300, 30)
  AddGadgetItem(#Gadget_list_codeur, -1, "Dobro : Createur du truc")
  AddGadgetItem(#Gadget_list_codeur, -1, "Graph100 : Optimiseur du truc")
  AddGadgetItem(#Gadget_list_codeur, -1, "Cederavic : Styler pour le truc")
  AddGadgetItem(#Gadget_list_codeur, -1, "Blendman : Style Flou")
  SetGadgetState(#Gadget_list_codeur, 0)
EndIf

;}

;{ *************** initialisations Graphique *********************************
InitSprite()

OpenWindowedScreen(WindowID(#window),200,70,1024,768,1,20,20) ; l'ecran

SetWindowCallback(@MyWindowCallback())
; ***** Creation du pinceau ******
CreateSprite(#pinceau,8,8)

;-** list des styles
AddGadgetItem(#Gadget_list_style, 0, "Impressionnism 1")
AddGadgetItem(#Gadget_list_style, 1, "Croix ")
AddGadgetItem(#Gadget_list_style, 2, "Croix creuse ")
AddGadgetItem(#Gadget_list_style, 3, "Vermicelle ")
AddGadgetItem(#Gadget_list_style, 4, "pointillisme")
AddGadgetItem(#Gadget_list_style, 5, "Flocon")
AddGadgetItem(#Gadget_list_style, 6, "Aquarelle")
AddGadgetItem(#Gadget_list_style, 7, "Cederavic")
AddGadgetItem(#Gadget_list_style, 8, "Pop_art")
AddGadgetItem(#Gadget_list_style, -1, "Brosse Floue")
AddGadgetItem(#Gadget_list_style, -1, "Pointillisme Flou")
SetGadgetState(#Gadget_list_style, 0)

;} 

Dim image_tab(1024, 768)

;{ ********************* boucle principale ***********************************²
;-Boucle principale
Repeat
  
  ;-Dessin a main levée
  
  If Flag_bouton_on=1 ; recupe les coordonées de la souris si click
    
    GetCursorPos_(lpPoint)
    ;   Debug "X = " + Str(lpPoint\x)
    ;  Debug "Y = " + Str(lpPoint\y)
    ;if lpPoint\x>200 and lpPoint\x<1024
    ;if lpPoint\y>70 and lpPoint\y<768
    
    ;Debug "X = " + Str(lpPoint\x)
    ;Debug "Y = " + Str(lpPoint\y)
    
    xx_mouse=WindowMouseX(#window)-100
    yy_mouse= WindowMouseY(#window)-50
    
    If IsImage(#image_reference)
      Largeur=1024
      Hauteur=768
      delay_affichage=20
      Phase =Random(9)
      
      Select Style
          
        Case 0 ; Expressionisme1
          
          nombre_de_coup_de_pinceau=10
          Taille_x=Random(3,1):Taille_y=Random(5,1)
          peint_impres(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, image_tab())
          
        Case 1 ; Croix
          nombre_de_coup_de_pinceau=10
          Taille_x=Random(3,1):Taille_y=Random(3,1)
          peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage,  image_tab()) ; le Pinceau Croix
          
        Case 2 ;Croix2
          nombre_de_coup_de_pinceau=10
          Taille_x=Random(3,1):Taille_y=Random(3,1)
          peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, image_tab()) ; le pinceau Croix2
          
        Case 3 ; Vermicelle
          phase=Random(7,1)
          
          nombre_de_coup_de_pinceau=5
          Taille_x=Random(1,1):Taille_y=Random(1,1)
          peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, image_tab()) ; le Pinceau Croix
          
        Case 4 ; Pointillisme
          nombre_de_coup_de_pinceau=10
          Taille_x=Random(2,1):Taille_y=Random(2,1)
          peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, image_tab())
          
        Case 5 ; Flocon
          nombre_de_coup_de_pinceau=2
          Taille_x=Random(10,1):Taille_y=Random(10,1)
          peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, image_tab())
          
        Case 6 ; Aquarelle
          nombre_de_coup_de_pinceau=10
          Taille_x=2:Taille_y=3
          peint_aquarelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, image_tab())
          
        Case 7 ; Cederavic
          phase=Random(3,2)
          nombre_de_coup_de_pinceau=50
          Taille_x=Random(64,1):Taille_y=Random(20,1)
          peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage,  image_tab()) ; le pinceau Cederavic
          
        Case 8 ; Pop_art
          Taille_x=Random(5,1):Taille_y=Random(5,1)
          nombre_de_coup_de_pinceau=2
          phase=Random(7,1)
          delay_affichage=20          
          peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, image_tab())
          
      EndSelect
      
    EndIf
    
    ; debug "tt: "+str( windowHeight(#window)-20)
    ;Endif
    ;Endif
  EndIf
  
  Event=WaitWindowEvent()
  Select  Event
      
    Case #PB_Event_Gadget
      
      Select EventGadget()
          
        Case #Gadget_list_style ; on a choisi un style ?
          Style= GetGadgetState(#Gadget_list_style)
          
        Case #bouton_Sauve
          
          GrabSprite(#image_sortie, 0, 0, 1024, 768)
                    
          File_image_save$=SaveFileRequester("Load Picture",File_image$,"*.png",1)
          If File_image_save$<>""
            SaveSprite(#image_sortie,File_image_save$,#PB_ImagePlugin_PNG   )
            FreeSprite(#image_sortie)
            If LoadImage(#image_sortie,File_image_save$)
              ResizeImage(#image_sortie,x_image_origine,y_image_origine)
              SaveImage(#image_sortie,File_image_save$,#PB_ImagePlugin_PNG)
              FreeImage(#image_sortie)
            EndIf
          EndIf
          
        Case #bouton_charge_image
          
          File_image$=OpenFileRequester("Load Picture",File_image$,"*.jpg|*.jpg|*.png|*.png|*.bmp|*.bmp|*.*|*.*",0)
          If File_image$<>""
            If LoadImage(#image_reference,File_image$)
              x_image_origine=ImageWidth(#image_reference)
              y_image_origine=ImageHeight(#image_reference)
              ResizeImage(#image_reference,1024,768)
              If StartDrawing(ScreenOutput())
                DrawImage(ImageID(#image_reference),0,0)
                StopDrawing()
              EndIf
              FlipBuffers()
            EndIf
            ; *****ne pas toucher servira dans tout les Styles ******
            
            INIT(1024, 768,image_tab())
            ; **************************************************
          Else
          EndIf
          
        Case #bouton_dessin
          
          If IsImage(#image_reference)
            ;DisableDebugger
            
            SetGadgetText(#Gadget_text, "Phase 1/9")
            
            largeur=ImageWidth(#image_reference)
            Hauteur=ImageHeight(#image_reference)
            
            ;CallDebugger
            ;- **selection_style
            Select Style
              Case 0 ; Expressionisme1
                Expressionnisme1(largeur,Hauteur,image_tab())
              Case 1 ; Croix
                Croix(Largeur,Hauteur,image_tab())
              Case 2 ;Croix2
                Croix2(Largeur,Hauteur,image_tab())
              Case 3 ; Vermicelle
                vermicelle(Largeur,Hauteur,image_tab())
              Case 4 ; Pointillisme
                pointillism(Largeur,Hauteur,image_tab())
              Case 5 ; Flocon
                flocon(Largeur,Hauteur,image_tab())
              Case 6 ; Pastel
                aquarelle(Largeur,Hauteur,image_tab())
              Case 7 ; Cederavic
                cederavic(Largeur,Hauteur,image_tab())
              Case 8 ; Pop_art
                Pop_art(Largeur,Hauteur,image_tab())
              Case 9 ; Brossefloue
                BrosseFloue(Largeur,Hauteur,image_tab())
              Case 10
                pointillism2(Largeur,Hauteur,image_tab())
                
            EndSelect
          EndIf
          SetGadgetState(#Gadget_scroll, 0)
          
        Case #bouton_efface
          ClearScreen(RGB(0,0,0))
          If StartDrawing(ScreenOutput())
            DrawImage(ImageID(#image_reference),0,0)
            StopDrawing()
          EndIf
          FlipBuffers()
          
      EndSelect
      
  EndSelect
  
Until  Event=#PB_Event_CloseWindow
;} *************** fin boucle principale ****************************************

Write_preference()

;{ **************************** Zone des Procedures **************************************

Procedure INIT(largeur,Hauteur, Array image_tab(2))
  ; By Graph100
  If IsImage(#image_reference)
    StartDrawing(ImageOutput(#image_reference))
    For a = 0 To largeur -1
      For b = 0 To Hauteur -1
        image_tab(a, b)=Point(a,b) ; recup la Couleur         
      Next b
    Next a
    StopDrawing()
  EndIf
EndProcedure

;{ Les Styles font appel aux pinceaux
Procedure Expressionnisme1(largeur,Hauteur,Array image_tab(2))
EndProcedure

Procedure croix(Largeur,Hauteur,Array image_tab(2))
  ;-le Style Croix
  ; by Dobro
  Phase=1
  nombre_de_coup_de_pinceau=400
  Taille_x=100:Taille_y=100
  SetGadgetText(#Gadget_text, "Phase 1/7")
  peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20, image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 2/7")
  Phase=2
  nombre_de_coup_de_pinceau=600
  Taille_x=50:Taille_y=50
  Peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 40,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 3/7")
  Phase=3
  nombre_de_coup_de_pinceau=3000
  Taille_x=20:Taille_y=20
  Peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 4/7")
  Phase=4
  nombre_de_coup_de_pinceau=4000
  Taille_x=10:Taille_y=10
  Peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 5/7")
  Phase=5
  nombre_de_coup_de_pinceau=8000
  Taille_x=4:Taille_y=4
  Peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 6/7")
  Phase=6
  nombre_de_coup_de_pinceau=10000
  Taille_x=2:Taille_y=2
  Peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 7/7")
  Phase=7
  nombre_de_coup_de_pinceau=20000
  Taille_x=1:Taille_y=1
  Peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 800,image_tab())
  Beep_(880,100)
EndProcedure

Procedure vermicelle(Largeur,Hauteur,Array image_tab(2))
  ;-le Style Vermicelle
  ; by Dobro
  Phase=1
  nombre_de_coup_de_pinceau=40
  Taille_x=100:Taille_y=100
  SetGadgetText(#Gadget_text, "Phase 1/7")
  peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20, image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 2/7")
  Phase=2
  nombre_de_coup_de_pinceau=60
  Taille_x=50:Taille_y=50
  Peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 40,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 3/7")
  Phase=3
  nombre_de_coup_de_pinceau=300
  Taille_x=4:Taille_y=4
  Peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 4/7")
  Phase=4
  nombre_de_coup_de_pinceau=9000
  Taille_x=3:Taille_y=3
  Peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 5/7")
  Phase=5
  nombre_de_coup_de_pinceau=9800
  Taille_x=1:Taille_y=1
  Peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 6/7")
  Phase=6
  nombre_de_coup_de_pinceau=9800
  Taille_x=1:Taille_y=1
  Peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  
  
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 7/7")
  Phase=7
  nombre_de_coup_de_pinceau=50000
  Taille_x=1:Taille_y=1
  Peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 800,image_tab())
  Beep_(880,100)
EndProcedure

Procedure croix2(Largeur,Hauteur,Array image_tab(2))
  ;- Le Style Croix2
  ; by Dobro
  Phase=1
  nombre_de_coup_de_pinceau=400
  Taille_x=100:Taille_y=100
  SetGadgetText(#Gadget_text, "Phase 1/7")
  peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20, image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 2/7")
  Phase=2
  nombre_de_coup_de_pinceau=600
  Taille_x=50:Taille_y=50
  Peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 40,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 3/7")
  Phase=3
  nombre_de_coup_de_pinceau=3000
  Taille_x=20:Taille_y=20
  Peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 4/7")
  Phase=4
  nombre_de_coup_de_pinceau=4000
  Taille_x=10:Taille_y=10
  Peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 5/7")
  Phase=5
  nombre_de_coup_de_pinceau=8000
  Taille_x=4:Taille_y=4
  Peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 6/7")
  Phase=6
  nombre_de_coup_de_pinceau=10000
  Taille_x=2:Taille_y=2
  Peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 7/7")
  Phase=7
  nombre_de_coup_de_pinceau=50000
  Taille_x=1:Taille_y=1
  Peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 800,image_tab())
  Beep_(880,100)
EndProcedure

Procedure pointillism(largeur,Hauteur,Array image_tab(2))
  ;- le Style pointillisme
  Phase=1
  nombre_de_coup_de_pinceau=500
  Taille_x=100:Taille_y=100
  Peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 2/9")
  Phase=2
  nombre_de_coup_de_pinceau=1200
  Taille_x=50:Taille_y=50
  Peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 40,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 3/9")
  Phase=3
  nombre_de_coup_de_pinceau=2400
  Taille_x=10:Taille_y=10
  Peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 80,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 4/9")
  Phase=4
  nombre_de_coup_de_pinceau=3800
  Taille_x=5:Taille_y=5
  Peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 100,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 5/9")
  Phase=5
  nombre_de_coup_de_pinceau=5800
  Taille_x=4:Taille_y=4
  Peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 300,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 6/9")
  Phase=6
  nombre_de_coup_de_pinceau=6500
  Taille_x=3:Taille_y=3
  Peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 500,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 7/9")
  Phase=7
  nombre_de_coup_de_pinceau=7000
  Taille_x=3:Taille_y=3
  Peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 500,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 8/9")
  Phase=8
  nombre_de_coup_de_pinceau=9500
  Taille_x=2:Taille_y=2
  Peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 500,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 9/9")
  Phase=9
  nombre_de_coup_de_pinceau=100000
  Taille_x=1:Taille_y=1
  Peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 600,image_tab())
  FlipBuffers()
  Beep_(880,100)
  ;EnableDebugger
  SetGadgetText(#Gadget_text, "Terminé !")
  
EndProcedure

Procedure pointillism2(largeur,Hauteur,Array image_tab(2))
  ; by dobro, modified by blendman
  SetGadgetText(#Gadget_text, "Phase 1")
  Phase=1
  nombre_de_coup_de_pinceau=60000
  Taille_x=7
  Taille_y=7
  Peint_pointillism2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 300,image_tab())
  FlipBuffers()
  SetGadgetText(#Gadget_text, "Terminé !")
EndProcedure

Procedure aquarelle(largeur,Hauteur,Array image_tab(2))
  ;-le Style Aquarelle
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 1")
  Phase=1 ; ,e compte pas ici
  nombre_de_coup_de_pinceau=200000
  Taille_x=3:Taille_y=1 ; ne compte pas ici
  Peint_aquarelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 600,image_tab())
  FlipBuffers()
  Beep_(880,100)
  ;EnableDebugger
  SetGadgetText(#Gadget_text, "Terminé !")
EndProcedure

Procedure Pop_art(largeur,Hauteur,Array image_tab(2))
  ;-le Style pop_art
  ; by Dobro
  Beep_(440,50)
  Phase=1
  nombre_de_coup_de_pinceau=500
  Taille_x=100:Taille_y=100
  Peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 2/9")
  Phase=2
  nombre_de_coup_de_pinceau=1200
  Taille_x=50:Taille_y=50
  Peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 40,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 3/9")
  Phase=3
  nombre_de_coup_de_pinceau=2400
  Taille_x=10:Taille_y=10
  Peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 80,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 4/9")
  Phase=4
  nombre_de_coup_de_pinceau=3800
  Taille_x=5:Taille_y=5
  Peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 100,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 5/9")
  Phase=5
  nombre_de_coup_de_pinceau=5800
  Taille_x=4:Taille_y=4
  Peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 300,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 6/9")
  Phase=6
  nombre_de_coup_de_pinceau=6500
  Taille_x=3:Taille_y=3
  Peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 500,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 7/9")
  Phase=7
  nombre_de_coup_de_pinceau=7000
  Taille_x=3:Taille_y=3
  Peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 500,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 8/9")
  Phase=8
  nombre_de_coup_de_pinceau=39500
  Taille_x=2:Taille_y=2
  Peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 500,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 9/9")
  Phase=9
  nombre_de_coup_de_pinceau=300000
  Taille_x=1:Taille_y=1
  Peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 600,image_tab())
  FlipBuffers()
  Beep_(880,100)
  ;EnableDebugger
  SetGadgetText(#Gadget_text, "Terminé !")
  
EndProcedure

Procedure Flocon(largeur,Hauteur,Array image_tab(2))
  ;- le Style Flocon
  ; by Dobro
  Phase=1
  nombre_de_coup_de_pinceau=1500
  Taille_x=100:Taille_y=100
  Peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 20,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 2/9")
  Phase=2
  nombre_de_coup_de_pinceau=1200
  Taille_x=50:Taille_y=50
  Peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 40,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 3/9")
  Phase=3
  nombre_de_coup_de_pinceau=2400
  Taille_x=30:Taille_y=30
  Peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 80,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 4/9")
  Phase=4
  nombre_de_coup_de_pinceau=13800
  Taille_x=20:Taille_y=20
  Peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 100,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 5/9")
  Phase=5
  nombre_de_coup_de_pinceau=15800
  Taille_x=10:Taille_y=10
  Peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 300,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 6/9")
  Phase=6
  nombre_de_coup_de_pinceau=16500
  Taille_x=8:Taille_y=8
  Peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 500,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 7/9")
  Phase=7
  nombre_de_coup_de_pinceau=17000
  Taille_x=5:Taille_y=5
  Peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 500,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 8/9")
  Phase=8
  nombre_de_coup_de_pinceau=19500
  Taille_x=3:Taille_y=3
  Peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 500,image_tab())
  ; *********
  Beep_(440,50)
  SetGadgetText(#Gadget_text, "Phase 9/9")
  Phase=9
  nombre_de_coup_de_pinceau=300
  Taille_x=2:Taille_y=2
  Peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 600,image_tab())
  FlipBuffers()
  Beep_(880,100)
  ;EnableDebugger
  SetGadgetText(#Gadget_text, "Terminé !")
  
EndProcedure

Procedure cederavic(Largeur,Hauteur,Array image_tab(2))
  ;-le Style Cederavic
  ; by Cederavic
  Phase=1
  nombre_de_coup_de_pinceau=200
  SetGadgetText(#Gadget_text, "Phase 1/3")
  peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,128,32, 20, image_tab())
  Beep_(440,50)
  
  Phase=2
  nombre_de_coup_de_pinceau=2000
  SetGadgetText(#Gadget_text, "Phase 2/3")
  peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,24,128, 20, image_tab())
  Beep_(440,50)
  Phase=3
  
  nombre_de_coup_de_pinceau=32000
  SetGadgetText(#Gadget_text, "Phase 3/3")
  peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,4,64, 20, image_tab())
  Beep_(880,100)
EndProcedure

Procedure BrosseFloue(Largeur, HAuteur, Array image_tab(2))
  ; By blendman
  SetGadgetText(#Gadget_text, "Phase 1")
  Phase=1 ; 
  nombre_de_coup_de_pinceau=50000
  Taille_x = 8
  Taille_y=1 
  Peint_BrosseFloue(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 600,image_tab())
  FlipBuffers()
  SetGadgetText(#Gadget_text, "Terminé !")
EndProcedure

;}

;{ les Pinceaux (appelé par les Styles)

Procedure peint_impres(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
  ;- le pinceau impress
  ; By Dobro
  ; le pinceau est une procedure qui Reçois plusieurs information :
  ; phase , indique quelle phase de dessin est demandé , cela permet de scinder en plusieur Etape un dessin , par exempe en changeant de forme de pinceau
  ; largeur,Hauteur de l'image qu'on dessine
  ; nombre_de_coup_de_pinceau , comme son nom l'indique , le nombre de coup de pinceau dans la Phase Actuelle
  ;Taille_x,Taille_y : la taille du pinceau ( de preference plus la phase est grande , plus le pinceau devrai etre petit
  
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  StartDrawing(ScreenOutput())
  
  For i=1 To nombre_de_coup_de_pinceau
    
    ; ******** Entete Graph100**********************
    If i%delay_affichage = 0
      StopDrawing()
      FlipBuffers()
      StartDrawing(ScreenOutput())
    EndIf
    ; ********************************************
    If flag_bouton_on=0
      x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
      y_source=Random(hauteur-1)
    Else
      x_source=xx_mouse
      y_source=yy_mouse
      If x_source<0 :x_source=1:EndIf
      If x_source>1023 :x_source=1023:EndIf
    EndIf
    
    Couleur_ref=image_tab(x_source,y_source) ; recup la Couleur  de l'image d'origine     (Mise en tableau   image_tab())
    
    De=Random(10) ; ici j'utilise un Dé , car de façon aléatoire mon pinceau va changer de forme
    If De =1
      DrawingMode(#PB_2DDrawing_Default  )
      Box(x_source,y_source,Taille_x,Taille_y,Couleur_ref) ;une boite
      ;EndIf
      
    ElseIf De >=2 And De<4
      DrawingMode(#PB_2DDrawing_Default  )
      Circle(x_source,y_source,Taille_x,Couleur_ref) ; un rond
      ; EndIf
      
    ElseIf De >=4 And De<6
      If Phase<>6
        DrawingMode(#PB_2DDrawing_Outlined )
      EndIf
      Circle(x_source,y_source,Taille_x,Couleur_ref) ; un cercle
      ;EndIf
      
    ElseIf De >=6 And De<8
      If Phase<>6
        DrawingMode(#PB_2DDrawing_Outlined )
      EndIf
      Ellipse(x_source,y_source,Taille_x*4,Taille_x,Couleur_ref) ; une ellipse creuse verticale
      ;EndIf
      
    ElseIf De >=8 And De<=10
      If Phase<>6
        DrawingMode(#PB_2DDrawing_Outlined )
      EndIf
      Ellipse(x_source,y_source,Taille_x,Taille_x*4,Couleur_ref) ; une autre ellipse creuse horizontale
    EndIf
    While WindowEvent():Wend
    SetGadgetState(#Gadget_scroll, i)
  Next i
  
  StopDrawing()
  FlipBuffers()
EndProcedure

Procedure peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2)) ; le Pinceau Croix
  ;- le Pinceau Croix
  ; By Dobro
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  StartDrawing(ScreenOutput())
  
  For i=1 To nombre_de_coup_de_pinceau
    
    If i%delay_affichage = 0
      StopDrawing()
      FlipBuffers()
      StartDrawing(ScreenOutput())
    EndIf
    
    If flag_bouton_on=0
      x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
      y_source=Random(hauteur-1)
    Else
      x_source=xx_mouse
      y_source=yy_mouse
      If x_source<0 :x_source=1:EndIf
      If x_source>1023 :x_source=1023:EndIf
    EndIf
    
    Couleur_ref=image_tab(x_source,y_source) ; recup la Couleur         
    
    
    De=Random(3,1)
    
    If De >=1
      ;If Phase<>6
      ;DrawingMode(#PB_2DDrawing_Outlined )
      ;EndIf
      Ellipse(x_source,y_source,Taille_x*4,Taille_y,Couleur_ref)
    EndIf
    If De >=2
      ;If Phase<>6
      ;DrawingMode(#PB_2DDrawing_Outlined )
      ;EndIf
      Ellipse(x_source,y_source,Taille_x,Taille_y*4,Couleur_ref)
    EndIf
    While WindowEvent():Wend
    SetGadgetState   (#Gadget_scroll, i)
  Next i
  
  StopDrawing()
  FlipBuffers()
  
EndProcedure

Procedure peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2)) ; le Pinceau Croix
  ;- le Pinceau vermicelle
  ; By Dobro
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  StartDrawing(ScreenOutput())
  
  For i=1 To nombre_de_coup_de_pinceau
    
    If i%delay_affichage = 0
      StopDrawing()
      FlipBuffers()
      StartDrawing(ScreenOutput())
    EndIf
    ;phase=7
    If flag_bouton_on=0
      x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
      y_source=Random(hauteur-1)
    Else
      x_source=xx_mouse
      y_source=yy_mouse
      If x_source<0 :x_source=1:EndIf
      If x_source>1023 :x_source=1023:EndIf
    EndIf
    
    Couleur_ref=image_tab(x_source,y_source) ; recup la Couleur         
    
    De=Random(2,1)
    
    
    ;De=1
    If phase>0 And phase<5
      If De =1
        
        For t=1 To 20
          x_source=x_source+Random(Taille_x)
          y_source=y_source+Random(Taille_y)
          Circle(x_source,y_source,Taille_x,Couleur_ref)
        Next t
      EndIf
      
      If De =2
        For t=1 To 20
          x_source=x_source-Random(Taille_x)
          y_source=y_source+Random(Taille_y)
          Circle(x_source,y_source,Taille_x,Couleur_ref)
        Next t
      EndIf
    EndIf
    
    If phase >4 And phase<6
      If De =1
        
        For t=1 To 40
          x_source=x_source+Random(Taille_x)
          y_source=y_source+Random(Taille_y)
          Circle(x_source,y_source,Taille_x,Couleur_ref)
        Next t
      EndIf
      
      If De =2
        For t=1 To 10
          x_source=x_source-Random(Taille_x)
          y_source=y_source+Random(Taille_y)
          Circle(x_source,y_source,Taille_x,Couleur_ref)
        Next t
      EndIf
    EndIf
    If phase >5 And phase<7
      If De =1
        
        For t=1 To 10
          x_source=x_source+Random(Taille_x)
          y_source=y_source+Random(Taille_y)
          Circle(x_source,y_source,Taille_x,Couleur_ref)
        Next t
      EndIf
      
      If De =2
        For t=1 To 40
          x_source=x_source-Random(Taille_x)
          y_source=y_source+Random(Taille_y)
          Circle(x_source,y_source,Taille_x,Couleur_ref)
        Next t
      EndIf
    EndIf
    If phase >6
      If De =1
        
        For t=1 To 20
          x_source=x_source+Random(Taille_x)
          y_source=y_source+Random(Taille_y)
          Circle(x_source,y_source,Taille_x,Couleur_ref)
        Next t
      EndIf
      
      If De =2
        For t=1 To 20
          x_source=x_source-Random(Taille_x)
          y_source=y_source+Random(Taille_y)
          Circle(x_source,y_source,Taille_x,Couleur_ref)
        Next t
      EndIf
    EndIf
    
    
    While WindowEvent():Wend
    SetGadgetState   (#Gadget_scroll, i)
  Next i
  
  StopDrawing()
  FlipBuffers()
  
EndProcedure

Procedure peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2)) ; le pinceau Croix2
  ;-le pinceau Croix2
  ; By Dobro
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  StartDrawing(ScreenOutput())
  
  For i=1 To nombre_de_coup_de_pinceau
    
    If i%delay_affichage = 0
      StopDrawing()
      FlipBuffers()
      StartDrawing(ScreenOutput())
    EndIf
    
    If flag_bouton_on=0
      x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
      y_source=Random(hauteur-1)
    Else
      x_source=xx_mouse
      y_source=yy_mouse
      If x_source<0 :x_source=1:EndIf
      If x_source>1023 :x_source=1023:EndIf
    EndIf
    
    Couleur_ref=image_tab(x_source,y_source) ; recup la Couleur         
    
    
    De=Random(2,1)
    
    If De >=1
      ;If Phase<>6
      DrawingMode(#PB_2DDrawing_Outlined )
      ;EndIf
      Ellipse(x_source,y_source,Taille_x*8,Taille_x,Couleur_ref)
    EndIf
    If De >=2
      ;If Phase<>6
      DrawingMode(#PB_2DDrawing_Outlined )
      ;EndIf
      Ellipse(x_source,y_source,Taille_x,Taille_x*8,Couleur_ref)
    EndIf
    While WindowEvent():Wend
    SetGadgetState   (#Gadget_scroll, i)
  Next i
  
  StopDrawing()
  FlipBuffers()
  
EndProcedure

Procedure peint_pointillism(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
  ;- le pinceau pointillism
  ; By Dobro
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  StartDrawing(ScreenOutput())
  
  For i=1 To nombre_de_coup_de_pinceau
    
    If i%delay_affichage = 0
      StopDrawing()
      FlipBuffers()
      StartDrawing(ScreenOutput())
    EndIf
    
    If flag_bouton_on=0
      x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
      y_source=Random(hauteur-1)
    Else
      x_source=xx_mouse
      y_source=yy_mouse
      If x_source<0 :x_source=1:EndIf
      If x_source>1023 :x_source=1023:EndIf
    EndIf
    
    Couleur_ref=image_tab(x_source,y_source) ; recup la Couleur         
    
    DrawingMode(#PB_2DDrawing_Default)
    For nb=1 To 6
      x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
      y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
      Circle(x_source,y_source,Taille_x,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
    Next nb
    
    ;{ old
If old
    ;De=Random(10)
    If Couleur_ref<RGB(50,50,50)
      DrawingMode(#PB_2DDrawing_AlphaBlend  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref)/2,green(Couleur_ref)/2,blue(Couleur_ref)))
      For nb=1 To 6
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
        Circle(x_source,y_source,Taille_x,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
      Next nb
      
      
    EndIf
    If Couleur_ref>RGB(49,49,49) And Couleur_ref<RGB(100,100,100)
      DrawingMode(#PB_2DDrawing_AlphaBlend  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref)/2,green(Couleur_ref),blue(Couleur_ref)))
      For nb=1 To 6
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
        Circle(x_source,y_source,Taille_x,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
      Next nb
    EndIf
    If Couleur_ref>RGB(99,99,99) And Couleur_ref<RGB(150,150,150)
      DrawingMode(#PB_2DDrawing_AlphaBlend  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref),green(Couleur_ref)/2,blue(Couleur_ref)/2))
      For nb=1 To 5
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
        Circle(x_source,y_source,Taille_x,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
      Next nb
    EndIf
    If Couleur_ref>RGB(149,149,149) And Couleur_ref<RGB(200,200,200)
      DrawingMode(#PB_2DDrawing_AlphaBlend  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref/2),green(Couleur_ref),blue(Couleur_ref)/2))
      For nb=1 To 4
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
        Circle(x_source,y_source,Taille_x,RGBA(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref),100))
      Next nb
    EndIf
    If Couleur_ref>RGB(199,199,199) And Couleur_ref<RGB(255,255,255)
      DrawingMode(#PB_2DDrawing_AlphaBlend  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref),green(Couleur_ref),blue(Couleur_ref)))
      For nb=1 To 4
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_x)
        Circle(x_source,y_source,Taille_x,RGBA(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref),100))
      Next nb
      
    EndIf
  EndIf
  ;}
  
    While WindowEvent():Wend
    SetGadgetState   (#Gadget_scroll, i)
  Next i
  
  StopDrawing()
  FlipBuffers()
  
  
EndProcedure

Procedure peint_aquarelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
  ;- le pinceau Aquarelle
  ; By Dobro
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  ; lance le mode pointillisme :)
  If flag_bouton_on=0
    pointillism(largeur,Hauteur,image_tab()) ; une fois le tableau fait ,....
  EndIf
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  ; on Aquarellise !!
  StartDrawing(ScreenOutput())
  SetGadgetText(#Gadget_text, "Aquarellisation !")
  For i=1 To nombre_de_coup_de_pinceau
    If i%delay_affichage = 0
      StopDrawing()
      FlipBuffers()
      StartDrawing(ScreenOutput())
    EndIf
    If flag_bouton_on=0
      x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
      y_source=Random(hauteur-1)
    Else
      x_source=xx_mouse
      y_source=yy_mouse
      If x_source<0 :x_source=1:EndIf
      If x_source>1023 :x_source=1023:EndIf
    EndIf
    
    larg=ScreenWidth()
    haut=ScreenHeight()
    If y_source>2 And x_source>4 And x_source<larg-3  And y_source<haut-1
      col1= Point(x_source,y_source)
      If flag_bouton_on=0
        r=Red(col1)+10
        v=Green(col1)+10
        b=Blue(col1)+10
      Else
        r=Red(col1)+1
        v=Green(col1)+1
        b=Blue(col1)+1
      EndIf
      If r>255 : r=255:EndIf
      If v>255 : v=255:EndIf
      If b>255 : b=255:EndIf
      col1=RGBA(r,v,b,8)
      ;StopDrawing()
      DrawingMode(#PB_2DDrawing_AlphaBlend )
      ;circle(x_source,y_source,5,col1)
      xxx=-3+Random(6)
      Ellipse(x_source+xxx,y_source,taille_x,taille_y,col1)
    EndIf
    
    While WindowEvent():Wend
    SetGadgetState   (#Gadget_scroll, i)
  Next i
  StopDrawing()
  
  FlipBuffers()
  
  
EndProcedure

Procedure peint_pop_art(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
  ;- le pinceau Pop_art
  ; By Dobro
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  StartDrawing(ScreenOutput())
  
  For i=1 To nombre_de_coup_de_pinceau
    
    If i%delay_affichage = 0
      StopDrawing()
      FlipBuffers()
      StartDrawing(ScreenOutput())
    EndIf
    
    If flag_bouton_on=0
      x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
      y_source=Random(hauteur-1)
    Else
      x_source=xx_mouse
      y_source=yy_mouse
      If x_source<0 :x_source=1:EndIf
      If x_source>1023 :x_source=1023:EndIf
    EndIf
    
    Couleur_ref=image_tab(x_source,y_source) ; recup la Couleur         
    
    
    ;De=Random(10)
    
    If Couleur_ref<RGB(50,50,50)
      
      dee=Random(3,1)
      If dee=1:Couleur_ref=RGB(Red(Couleur_ref),0,0):EndIf : If dee=2:Couleur_ref=RGB(0,Green(Couleur_ref),0):EndIf: If dee=3:Couleur_ref=RGB(0,0,Blue(Couleur_ref)):EndIf
      DrawingMode(#PB_2DDrawing_AlphaBlend  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref)/2,green(Couleur_ref)/2,blue(Couleur_ref)))
      For nb=1 To 6
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
        Circle(x_source,y_source,Taille_x,RGBA(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref),255))
      Next nb
    EndIf
    If Couleur_ref<RGB(26,26,26)
      Couleur_ref=0
      
      DrawingMode(#PB_2DDrawing_AlphaBlend  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref)/2,green(Couleur_ref)/2,blue(Couleur_ref)))
      For nb=1 To 6
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
        Circle(x_source,y_source,Taille_x,RGBA(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref),255))
      Next nb
    EndIf
    
    If Couleur_ref>RGB(25,25,25) And Couleur_ref<RGB(50,50,50)
      r=Red(Couleur_ref)
      v=Green(Couleur_ref)
      b=Blue(Couleur_ref)
      Couleur_ref=(r+v+b)/3
      DrawingMode(#PB_2DDrawing_AlphaBlend  )
      Circle(x_source,y_source,Taille_x,RGB(Red(Couleur_ref)/2,Green(Couleur_ref)/2,Blue(Couleur_ref)))
      For nb=1 To 6
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
        Circle(x_source,y_source,Taille_x,RGBA(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref),20))
      Next nb
    EndIf
    
    If Couleur_ref>RGB(49,49,49) And Couleur_ref<RGB(100,100,100)
      Couleur_ref=RGB(0,0,Blue(Couleur_ref)) ;bleu
      DrawingMode(#PB_2DDrawing_AlphaBlend   )
      Circle(x_source,y_source,Taille_x,RGB(Red(Couleur_ref)/2,Green(Couleur_ref),Blue(Couleur_ref)))
      For nb=1 To 6
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
        Circle(x_source,y_source,Taille_x,RGBA(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref),10))
      Next nb
    EndIf
    If Couleur_ref>RGB(99,99,99) And Couleur_ref<RGB(150,150,150)
      Couleur_ref=RGB(0,Green(Couleur_ref),0) ; vert
      DrawingMode(#PB_2DDrawing_AlphaBlend   )
      Circle(x_source,y_source,Taille_x,RGB(Red(Couleur_ref),Green(Couleur_ref)/2,Blue(Couleur_ref)/2))
      For nb=1 To 5
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
        Circle(x_source,y_source,Taille_x,RGBA(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref),10))
      Next nb
    EndIf
    If Couleur_ref>RGB(149,149,149) And Couleur_ref<RGB(200,200,200)
      Couleur_ref=RGB(Red(Couleur_ref),0,0) ;rouge
      DrawingMode(#PB_2DDrawing_AlphaBlend   )
      Circle(x_source,y_source,Taille_x,RGB(Red(Couleur_ref/2),Green(Couleur_ref),Blue(Couleur_ref)/2))
      For nb=1 To 4
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y)
        Circle(x_source,y_source,Taille_x,RGBA(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref),10))
      Next nb
    EndIf
    
    If Couleur_ref>RGB(199,199,199) And Couleur_ref<RGB(255,255,255)
      Couleur_ref=RGB(Red(Couleur_ref),Green(Couleur_ref),0) ; jaune
      DrawingMode(#PB_2DDrawing_AlphaBlend  )
      Circle(x_source,y_source,Taille_x,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
      For nb=1 To 4
        x_source=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x)
        y_source=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_x)
        Circle(x_source,y_source,Taille_x,RGBA(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref),10))
      Next nb
      
    EndIf
    
    
    
    While WindowEvent():Wend
    SetGadgetState   (#Gadget_scroll, i)
  Next i
  
  StopDrawing()
  FlipBuffers()
  
EndProcedure

Procedure peint_flocon(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
  ;- le pinceau flocon
  ; By Dobro
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  StartDrawing(ScreenOutput())
  
  For i=1 To nombre_de_coup_de_pinceau
    
    If i%delay_affichage = 0
      StopDrawing()
      FlipBuffers()
      StartDrawing(ScreenOutput())
    EndIf
    
    If flag_bouton_on=0
      x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
      y_source=Random(hauteur-1)
    Else
      x_source=xx_mouse
      y_source=yy_mouse
      If x_source<0 :x_source=1:EndIf
      If x_source>1023 :x_source=1023:EndIf
    EndIf
    
    Couleur_ref=image_tab(x_source,y_source) ; recup la Couleur         
    
    
    ;De=Random(10)
    If Couleur_ref<RGB(50,50,50)
      DrawingMode(#PB_2DDrawing_Default  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref)/2,green(Couleur_ref)/2,blue(Couleur_ref)))
      For nb=1 To 6
        x_source2=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x*2)
        y_source2=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y*2)
        LineXY(x_source,y_source,x_source2,y_source2,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
      Next nb
      
      
    EndIf
    If Couleur_ref>RGB(49,49,49) And Couleur_ref<RGB(100,100,100)
      DrawingMode(#PB_2DDrawing_Default  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref)/2,green(Couleur_ref),blue(Couleur_ref)))
      For nb=1 To 6
        x_source2=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x*2)
        y_source2=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y*2)
        LineXY(x_source,y_source,x_source2,y_source2,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
      Next nb
    EndIf
    If Couleur_ref>RGB(99,99,99) And Couleur_ref<RGB(150,150,150)
      DrawingMode(#PB_2DDrawing_Default  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref),green(Couleur_ref)/2,blue(Couleur_ref)/2))
      For nb=1 To 5
        x_source2=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x*4)
        y_source2=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y*4)
        LineXY(x_source,y_source,x_source2,y_source2,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
      Next nb
    EndIf
    If Couleur_ref>RGB(149,149,149) And Couleur_ref<RGB(200,200,200)
      DrawingMode(#PB_2DDrawing_Default  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref/2),green(Couleur_ref),blue(Couleur_ref)/2))
      For nb=1 To 2
        x_source2=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x*8)
        y_source2=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_y*8)
        LineXY(x_source,y_source,x_source2,y_source2,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
      Next nb
    EndIf
    If Couleur_ref>RGB(199,199,199) And Couleur_ref<RGB(255,255,255)
      DrawingMode(#PB_2DDrawing_Default  )
      ;Circle(x_source,y_source,Taille_x,Rgb(red(Couleur_ref),green(Couleur_ref),blue(Couleur_ref)))
      For nb=1 To 8
        x_source2=x_source+Taille_x*Sin(nb*2 * 3.1415926/Taille_x*10)
        y_source2=y_source+Taille_x*Cos(nb*2 * 3.1415926/Taille_x*10)
        LineXY(x_source,y_source,x_source2,y_source2,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
      Next nb
      
    EndIf
    
    While WindowEvent():Wend
    SetGadgetState   (#Gadget_scroll, i)
  Next i
  
  StopDrawing()
  FlipBuffers()
  
  
EndProcedure

Procedure peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2)) ; le pinceau Cederavic
  ;-le pinceau Cederavic
  ; By Cederavic
  img = CreateImage(#PB_Any, largeur,Hauteur, 32 | #PB_Image_Transparent)
  StartDrawing(ScreenOutput())
  img2 = GrabDrawingImage(#PB_Any, 0, 0, largeur,Hauteur)
  StopDrawing()
  StartDrawing(ImageOutput(img))
  If Phase = 1
    DrawImage(ImageID(#image_reference), 0, 0)
  Else
    DrawImage(ImageID(img2), 0, 0)
  EndIf
  StopDrawing()
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  StartDrawing(ImageOutput(img))
  
  For i=1 To nombre_de_coup_de_pinceau
    
    If i%delay_affichage = 0
      StopDrawing()
      StartDrawing(ScreenOutput()) : DrawingMode(#PB_2DDrawing_Default) : DrawImage(ImageID(img), 0, 0) : StopDrawing()
      FlipBuffers()
      StartDrawing(ImageOutput(img))
    EndIf
    
    DrawingMode(#PB_2DDrawing_AlphaBlend)
    If flag_bouton_on=0
      x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
      y_source=Random(hauteur-1)
    Else
      x_source=xx_mouse
      y_source=yy_mouse
      If x_source<0 :x_source=1:EndIf
      If x_source>1023 :x_source=1023:EndIf
    EndIf
    maxRange.d = (1 - i / nombre_de_coup_de_pinceau) * Taille_y
    If size < 2 : size = 2 : EndIf
    
    angle.d = Random((#PI * 2) * 1000) / 1000
    angleDep.d = Random((#PI * 2) * 1000) / 100000 - ((#PI * 1000) / 100000)
    angleAdd.d = 0
    color = image_tab(x_source,y_source) ; recup la Couleur
    
    For iRange = 1 To maxRange
      angleAdd + angleDep
      xC = x_source + Cos(angle + angleAdd) * iRange
      yC = y_source + Sin(angle + angleAdd) * iRange
      If xC >= 0 And xC <= largeur And yC >= 0 And yC <= Hauteur
        cS.d = (1 - iRange / maxRange) * Taille_x
        If cS < 1.6 : cS = 1.6 : EndIf
        cA.d = (1 - iRange / maxRange) * 4
        If cA < 1 : cA = 1 : EndIf
        
        
        r.d = Red(color) * 0.7 + Red(image_tab(xC, yC)) * 0.3
        g.d = Green(color) * 0.7 + Green(image_tab(xC, yC)) * 0.3
        b.d = Blue(color) * 0.7 + Blue(image_tab(xC, yC)) * 0.3
        
        Circle(xC, yC, cS, RGBA(r, g, b, cA))
      EndIf
    Next
    
    While WindowEvent():Wend
    SetGadgetState   (#Gadget_scroll, i)
  Next i
  
  StopDrawing()
  FlipBuffers()
  
EndProcedure

Procedure peint_BrosseFloue(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
  img = CreateImage(#PB_Any, largeur,Hauteur, 32 | #PB_Image_Transparent)
  If img
    If StartDrawing(ScreenOutput())
      img2 = GrabDrawingImage(#PB_Any, 0, 0, largeur,Hauteur)
      StopDrawing()
    EndIf
  EndIf
  If  StartDrawing(ImageOutput(img))   
    If Phase = 1
      DrawImage(ImageID(#image_reference), 0, 0)
    Else
      DrawImage(ImageID(img2), 0, 0)
    EndIf
    StopDrawing()
  EndIf
  
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  If StartDrawing(ImageOutput(img))
    ; on efface d'abord l'image (utile pour la transparence ?)
    DrawingMode(#PB_2DDrawing_AlphaChannel)
    Box(0,0,largeur,Hauteur,RGBA(0,0,0,0))
    
    For i=1 To nombre_de_coup_de_pinceau
      
      If i%delay_affichage = 0
        StopDrawing()      
        StartDrawing(ScreenOutput()) : DrawingMode(#PB_2DDrawing_Default) : DrawImage(ImageID(img), 0, 0) : StopDrawing()
        FlipBuffers()
        StartDrawing(ImageOutput(img))
      EndIf
      
      DrawingMode(#PB_2DDrawing_Gradient|#PB_2DDrawing_AlphaBlend)
      
      If flag_bouton_on=0
        x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
        y_source=Random(hauteur-1)
      Else
        x_source=xx_mouse
        y_source=yy_mouse
        If x_source<0 :x_source=1:EndIf
        If x_source>1023 :x_source=1023:EndIf
      EndIf
      
      color = image_tab(x_source,y_source) ; recup la Couleur      
      
      BackColor(RGBA(Red(color),Green(color),Blue(color),10))
      FrontColor(RGBA(Red(color),Green(color),Blue(color),0))
      CircularGradient(x_source+Taille_x,y_source+Taille_x, Taille_x)     
      Box(x_source,y_source,Taille_x*4,Taille_x)    
      
      While WindowEvent():Wend
      SetGadgetState   (#Gadget_scroll, i)
      
    Next i  
    StopDrawing()
    FlipBuffers()
  EndIf
EndProcedure

Procedure peint_pointillism2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
  ;- le pinceau pointillism
  ; By Dobro
  ; modified by blendman
  
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  img = CreateImage(#PB_Any, largeur,Hauteur, 32 | #PB_Image_Transparent)
  If img
    If StartDrawing(ScreenOutput())
      img2 = GrabDrawingImage(#PB_Any, 0, 0, largeur,Hauteur)
      StopDrawing()
    EndIf
  EndIf
  If  StartDrawing(ImageOutput(img))   
    If Phase = 1
      DrawImage(ImageID(#image_reference), 0, 0)
    Else
      DrawImage(ImageID(img2), 0, 0)
    EndIf
    StopDrawing()
  EndIf
  
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
  
  If StartDrawing(ImageOutput(img))
    ; on efface d'abord l'image (utile pour la transparence ?)
    DrawingMode(#PB_2DDrawing_AlphaChannel)
    Box(0,0,largeur,Hauteur,RGBA(0,0,0,0))
    
    For i=1 To nombre_de_coup_de_pinceau
      
      If i%delay_affichage = 0
        StopDrawing()      
        StartDrawing(ScreenOutput()) : DrawingMode(#PB_2DDrawing_Default) : DrawImage(ImageID(img), 0, 0) : StopDrawing()
        FlipBuffers()
        StartDrawing(ImageOutput(img))
      EndIf
      
     
      
      If flag_bouton_on=0
        x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
        y_source=Random(hauteur-1)
      Else
        x_source=xx_mouse
        y_source=yy_mouse
        If x_source<0 :x_source=1:EndIf
        If x_source>1023 :x_source=1023:EndIf
      EndIf
      
      DrawingMode(#PB_2DDrawing_Outlined)
      color = image_tab(x_source,y_source) ; recup la Couleur      
      
      BackColor(RGBA(Red(color),Green(color),Blue(color),30))
      FrontColor(RGBA(Red(color),Green(color),Blue(color),0))
      
      Ellipse(x_source+Taille_x,y_source+Taille_x, Taille_x/3*Random(4),Taille_x/3*Random(4))
      
      DrawingMode(#PB_2DDrawing_Gradient|#PB_2DDrawing_AlphaBlend)
      CircularGradient(x_source+Taille_x,y_source+Taille_x, Taille_x)     
      Box(x_source,y_source,Taille_x*2,Taille_x*2)    
      
      
      
      While WindowEvent():Wend
      SetGadgetState   (#Gadget_scroll, i)
      
    Next i  
    StopDrawing()
    FlipBuffers()
  EndIf
  
EndProcedure

;}

;{ les Prefs
Procedure Write_preference()
  If CreatePreferences("Pure_autopaint.prefs")
    PreferenceGroup("Info")
    WritePreferenceString("ApplicationName", "Pure_autopaint")
    WritePreferenceString("Version", "1.00")
    
    PreferenceGroup("Window")
    
    PreferenceComment(" Les Window dimensions")
    PreferenceComment("")
    WritePreferenceLong ("WindowX", WindowX(#window))
    WritePreferenceLong ("WindowY", WindowY(#window))
    WritePreferenceLong ("WindowX_larg", WindowWidth(#window))
    WritePreferenceLong ("WindowY_haut", WindowHeight(#window))
    PreferenceGroup("Path")
    WritePreferenceString("chemin image", File_image$)
    ClosePreferences()
  EndIf
EndProcedure

Procedure Read_preference()
  Shared win_x,win_y,File_image$
  If OpenPreferences("Pure_autopaint.prefs")
    PreferenceGroup("Info")
    ReadPreferenceString("ApplicationName", "")
    ReadPreferenceString("Version", "")
    
    PreferenceGroup("Window")
    win_x=ReadPreferenceLong ("WindowX", 0)
    win_y=ReadPreferenceLong ("WindowY", 0)
    larg_fenetre=ReadPreferenceLong ("WindowX_larg", 800)
    haut_fenetre=ReadPreferenceLong ("WindowY_haut", 600)
    PreferenceGroup("Path")
    File_image$=ReadPreferenceString("chemin image", "c:\")
    ClosePreferences()
  EndIf
EndProcedure

Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  Select Message
    Case #WM_LBUTTONDOWN
      flag_bouton_on=1
      
    Case #WM_LBUTTONUP
      flag_bouton_on=0
    Case #WM_SETCURSOR
      ;;    Debug "Handle= "+Str(wParam)+"   , "+"ID= "+Str(GetDlgCtrlID_(wParam))
      
    Case #WM_SIZING
      larg_fenetre = WindowWidth(#window)
      haut_fenetre = WindowHeight(#window)
      If IsGadget(#Gadget_list_style)
        ResizeGadget(#Gadget_list_style, #PB_Ignore, #PB_Ignore,180,haut_fenetre-400-y_bouton)
      EndIf
  EndSelect 
  ProcedureReturn Result
EndProcedure
;}

;}

PS : j'ai enlevé quelques lignes, sinon, le code ne passait pas ^^
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Pure_Autopaint

Message par blendman »

J'ai testé ton zip, mais y'a pas le source ;)
(désolé pour le double post, mais j'avais plus de place dans le message d'avant ^^)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

je n'etais pas là une partie de la journée , sorry ....

j'ai mis a jour l'archive :)
Merci pour tes Styles


la prochaine fois, donne juste les 2 procedures par Styles (c'est a dire le Style et son pinceau ) ça me suffit pour l’intégration dans le code :)
inutile de me remettre tout le code ... :)
d'autant que maintenant il est trop gros ....

j'ai donc ajouté la possibilité de dessiner a la main ....
le probleme ( que vous createur de Styles , ne saviez pas... )
c'est que pour qu'un style marche correctement dans les 3 modes
(Dessin automatique ,Dessin Semi-automatique, Dessin Manuel )
il faut que vos procédures respectent un point capital ....

il faut que comme tout les Styles que j'ai créé , elles dessinent dans l'ecran , pas dans une image !
Cederavic a fait un style qui travail dans une image pour ensuite plaquer le resultat ...

le probleme d'un tel Style c'est que ça deviens compliqué a gerer en mode manuel ....
mais je ne désespère pas de trouver une soluce :)
Demain je changerai le code pour faire que comme le Style de Cederavic
tes Styles puissent etre utilisés en mode manuel ;)


donc comme tu as calqué son Style (du point de vue Architecture de Procedure ) , et non pas mon Style pointillism , comme tu l'entends :)
donc tes 2 styles pour le moment ne marcheront pas en mode manuel

mais fonctionnent en mode Auto et Semi-auto :)

en tout cas merci a toi pour ta contrib :)

j'ai commenté le Code , pour indiquer les partie de code a ne pas toucher
car ils sont utiles pour le mode Semi-auto et Manuel ...
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Pure_Autopaint

Message par blendman »

salut

Je comprends pour le style, j'essayerai de faire un autre style utilisant ta méthode ^^.
Sinon, pour ton archive c'est toujours celle du 15 février (sans le code et avec un ancien exe) qui est sur ton site ;).
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

Rhooooo ! mais quel boulet je fait !! :oops:

bon l'archive devrai cette fois ci etre bonne !


j'ai corrigé tes Deux Styles de façon a ce qu'il marche dans les 3 modes

regarde le Style Pointillism2 j'ai laissé les lignes commentés pour que tu puisse voir les modif
( j'ai surtout viré peins de trucs qui empêchait le fonctionnement dans les 3 mode )
de plus j'ai permis la possibilité d'utiliser une taille_y differente du X pour le mode Semi-auto
on peut ainsi avoir des pinceaux de tailles differente a chaque Salve de dessin :)

le mode dessin a la main marche :)

maintenant ça le fait :)


ps: prochaine évolution , utilisation de la Tablette Graphique :)
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Pure_Autopaint

Message par Frenchy Pilou »

Pour l'exe
Demande d'un bouton d'arrêt d'urgence!

Avec le mode Cederavic, (très beau :) impossible d'arrêter la bête! 8O
rien, ni clean, ni echap, ni clic droit, ni le x rouge, ni alt F4, ni ctrl + alt + Sup (Application ou processus), rien...
Bon j'ai un minitel de 10 ans d'âge mais c'est pas une raison! :D
Il a fallu attendre! :mrgreen:

Image
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Pure_Autopaint

Message par blendman »

salut

j'ai testé ton nouveau code, mais le fait d'avoir changé les procédures a enlevé tout l'intérêt du style (le flou). Je ne sais pas trop pourquoi, je vais regarder ça à l'occasion.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

arf !! mince, j'avais pas remarqué.. :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

retelecharge , je viens de corriger le pinceau Floue

c'ets parceque tu as besoin de l'image d'origine pour travailler en mode Auto et semi-auto

j'ai ajouté un petit test :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

Frenchy Pilou a écrit :Pour l'exe
Demande d'un bouton d'arrêt d'urgence!
c'est pourquoi dans les Derniere Version, j'impose 1000 et pas 10 000 :lol:
mais je vais t'ajouter ton bouton d'arret en mode Automatique :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

Code mis a jour , avec la Case Warning , qui arrete un long processus :)

désolé pour les multiples mises a jour /téléchargements, mais on est quasi en temps réel :lol:

ici : http://michel.dobro.free.fr/download.php?view.40
Répondre