Et pour la suite du truc : j'ai modifié certaines choses pour qu'il soit bcp plus facile d'ajouter une brosse.
J'ai aussi mis à profit le canvasgadget(), dans le but de proposer une interface un peu plus pratique (je dois dire que mon pc est en 1336*768, donc je ne voyais pas la totalité de la fenêtre graphique...)
Donc maintenant le prog est redimensionnable, la totalité du dessin est affiché à l'échelle, et le travail se fait sur l'image avec les tailles de bases.
Ceci implique de revoir un peu la stratégie des nombres de coup de pinceau : plus l'image est grande, plus il en faut, et visser-versa.
Il faut donc régler le nombre de coup de pinceau en fonction de la surface à peindre (Je n'ai pas modifier ça, c'est à faire).
C'est facile, mais il faut retrouver les bonnes proportions ! (nb_coup_pinceau_par_aire * hauteur * largeur)
[EDIT] : je viens de le modifier, ça fonctionne mieux, mais il faudrait tester pour différent format d'image.
J'ai aussi nettoyé un peu le code, de sorte à ce qu'il soit plus facile à lire, et modifié l'interface (replacer les boutons sur le coté...)
Bref, il y a des modifs, mais je pense qu'elle sont plutôt pratique.
Il faut ajouter une ligne avant les addgadgetitem(), ça mettra le nouveau style bas de la liste !
Il faut bien penser à changer "MonStyle" et @MAIN_MonStyle() par le bon nom et la bonne adresse de procedure,
Et c'est TOUT ! il n'y a plus besoin de modifier le code ailleurs, c'est automatique.
Pour les nouveaux pinceaux, il faut juste prendre les anciens et modifier les deux procédures en gardant la trame.
@Dobro : c'est marrant, mais le code que tu as posté en début de topic a des tabulations n'importe comment ! Surtout vers la fin... Ca n'est pas très pratique pour le lire
Code : Tout sélectionner
;{ ************** initialisations/Declarations ***************************
;- ******** initialisations ********
UsePNGImageDecoder()
UseJPEGImageDecoder()
UsePNGImageEncoder()
Global Window_0
Global Combobox_0, Text_2_Titre, Canvas_1_Display, Button_0_LoadImage, Button_1_Stop, Button_1_Draw, ProgressBar_0, Button_0_SaveImage, ListView_0, Text_4_Info
Enumeration #PB_Compiler_EnumerationValue
#Text_0_Codeurs
#Text_0_Styles
EndEnumeration
Enumeration #PB_Compiler_EnumerationValue
#Font_0
#Font_1
EndEnumeration
LoadFont(#Font_0,"Comic Sans MS", 10, #PB_Font_Italic)
LoadFont(#Font_1,"Comic Sans MS", 13, #PB_Font_Bold)
;- ******** Declarations ********
Declare ResizeGadgetsWindow_0()
Declare Write_preference()
Declare Read_preference()
Declare INIT(largeur, Hauteur, Array image_tab(2))
; Declare MAIN_croix(Largeur, Hauteur, Array image_tab(2))
; Declare MAIN_croix2(Largeur,Hauteur,Array image_tab(2))
; Declare MAIN_Expressionnisme1(largeur,Hauteur,Array image_tab(2))
;
; Declare peint_croix(largeur, Hauteur, nombre_de_coup_de_pinceau, Taille_x, Taille_y, delay_affichage, Array image_tab(2))
; Declare peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
; Declare peint_impres(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
Procedure OpenWindow_0()
Window_0 = OpenWindow(#PB_Any, 0, 0, 790, 410, "PURE AutoPaint - Projet lancé par Dobro sur le FOFO FR !!", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
TextGadget(#Text_0_Codeurs, 180, 12, 80, 20, "Les Codeurs :")
SetGadgetFont(#Text_0_Codeurs, FontID(#Font_0))
Combobox_0 = ComboBoxGadget(#PB_Any, 270, 10, 250, 20)
Text_2_Titre = TextGadget(#PB_Any, 14, 8, 150, 30, "Pure AutoPaint")
SetGadgetFont(Text_2_Titre, FontID(#Font_1))
Canvas_1_Display = CanvasGadget(#PB_Any, 150, 50, 530, 350)
Button_0_LoadImage = ButtonGadget(#PB_Any, 10, 50, 130, 30, "Load Image")
Button_1_Stop = ButtonGadget(#PB_Any, 10, 90, 60, 30, "Stop")
Button_1_Draw = ButtonGadget(#PB_Any, 80, 90, 60, 30, "Draw")
ProgressBar_0 = ProgressBarGadget(#PB_Any, 10, 130, 130, 10, 0, 0)
Button_0_SaveImage = ButtonGadget(#PB_Any, 10, 180, 130, 30, "Save Image")
TextGadget(#Text_0_Styles, 10, 220, 80, 20, "Styles :")
SetGadgetFont(#Text_0_Styles, FontID(#Font_0))
ListView_0 = ListViewGadget(#PB_Any, 10, 250, 130, 150)
Text_4_Info = TextGadget(#PB_Any, 10, 150, 130, 20, "", #PB_Text_Border)
EndProcedure
Procedure ResizeGadgetsWindow_0()
Protected WindowWidth, WindowHeight
WindowWidth = WindowWidth(Window_0)
WindowHeight = WindowHeight(Window_0)
ResizeGadget(Canvas_1_Display, 150, 50, WindowWidth - 160, WindowHeight - 60)
ResizeGadget(ListView_0, 10, 240, 130, WindowHeight - 250)
EndProcedure
Enumeration ; Images
#image_reference
#image_Sortie
EndEnumeration
Global File_image$, Phase, Style
;} **********************************************************************
;{- ********************* Zone des Procedures ***************************
;- ******** Zone des Procedures ********
Macro MAJ_dessin()
StartDrawing(CanvasOutput(Canvas_1_Display))
Box(0, 0, GadgetWidth(Canvas_1_Display), GadgetHeight(Canvas_1_Display), 0)
ratio_gadget.d = GadgetWidth(Canvas_1_Display) / GadgetHeight(Canvas_1_Display)
If ratio_gadget > ratio
DrawImage(ImageID(#image_Sortie), 0, 0, GadgetHeight(Canvas_1_Display) * ratio, GadgetHeight(Canvas_1_Display))
Else
DrawImage(ImageID(#image_Sortie), 0, 0, GadgetWidth(Canvas_1_Display), GadgetWidth(Canvas_1_Display) / ratio)
EndIf
StopDrawing()
EndMacro
Macro MAJ_event()
Repeat
event = WindowEvent()
Select event
Case #PB_Event_SizeWindow
ResizeGadgetsWindow_0()
Case #PB_Event_Timer
Select EventTimer()
Case 0
SetGadgetState(Combobox_0, (GetGadgetState(Combobox_0) + 1) % CountGadgetItems(Combobox_0))
EndSelect
Case #PB_Event_CloseWindow
EXIT = #True
Break 2
Case #PB_Event_Gadget
If EventGadget() = Button_1_Stop
EXIT = #True
Break 2
EndIf
EndSelect
Until event = 0
EndMacro
Procedure INIT(largeur,Hauteur, Array image_tab(2))
; By Graph100
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()
EndProcedure
; PROCEDURE de dessin
Procedure peint_croix(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
; By Dobro, widely 'touched' by Graph100 ;)
EXIT = #False
If delay_affichage = 0 : delay_affichage = 1 : EndIf
SetGadgetAttribute(ProgressBar_0, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
ratio.d = largeur / Hauteur
StartDrawing(ImageOutput(#image_Sortie))
For i = 1 To nombre_de_coup_de_pinceau
If i % delay_affichage = 0
StopDrawing()
SetGadgetState(ProgressBar_0, i)
MAJ_dessin()
StartDrawing(ImageOutput(#image_Sortie))
EndIf
x_source = Random(largeur - 1)
y_source = Random(hauteur - 1)
Select Random(2, 1)
Case 1
Ellipse(x_source, y_source, Taille_x * 8, Taille_x, image_tab(x_source, y_source))
Case 2
Ellipse(x_source, y_source, Taille_x, Taille_x * 8, image_tab(x_source, y_source))
EndSelect
MAJ_event()
Next i
StopDrawing()
MAJ_dessin()
ProcedureReturn EXIT
EndProcedure
Procedure peint_croix2(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
; By Dobro, widely 'touched' by Graph100 ;)
EXIT = #False
If delay_affichage = 0 : delay_affichage = 1 : EndIf
SetGadgetAttribute(ProgressBar_0, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
ratio.d = largeur / Hauteur
StartDrawing(ImageOutput(#image_Sortie))
DrawingMode(#PB_2DDrawing_Outlined)
For i = 1 To nombre_de_coup_de_pinceau
If i % delay_affichage = 0
StopDrawing()
SetGadgetState(ProgressBar_0, i)
MAJ_dessin()
StartDrawing(ImageOutput(#image_Sortie))
DrawingMode(#PB_2DDrawing_Outlined)
EndIf
x_source = Random(largeur - 1)
y_source = Random(hauteur - 1)
Select Random(2, 1)
Case 1
Ellipse(x_source, y_source, Taille_x * 8, Taille_x, image_tab(x_source, y_source))
Case 2
Ellipse(x_source, y_source, Taille_x, Taille_x * 8, image_tab(x_source, y_source))
EndSelect
MAJ_event()
Next i
StopDrawing()
MAJ_dessin()
ProcedureReturn EXIT
EndProcedure
Procedure peint_impres(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Array image_tab(2))
; By Dobro, widely 'touched' by Graph100 ;)
EXIT = #False
If delay_affichage = 0 : delay_affichage = 1 : EndIf
SetGadgetAttribute(ProgressBar_0, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
ratio.d = largeur / Hauteur
StartDrawing(ImageOutput(#image_Sortie))
For i = 1 To nombre_de_coup_de_pinceau
If i % delay_affichage = 0
StopDrawing()
SetGadgetState(ProgressBar_0, i)
MAJ_dessin()
StartDrawing(ImageOutput(#image_Sortie))
EndIf
x_source = Random(largeur - 1)
y_source = Random(hauteur - 1)
Select Random(9, 1)
Case 1
DrawingMode(#PB_2DDrawing_Default)
Box(x_source, y_source, Taille_x, Taille_y, image_tab(x_source, y_source))
Case 2 To 3
DrawingMode(#PB_2DDrawing_Default)
Circle(x_source, y_source, Taille_x, image_tab(x_source, y_source))
Case 4
DrawingMode(#PB_2DDrawing_Outlined)
Circle(x_source, y_source, Taille_x, image_tab(x_source, y_source))
Case 5
DrawingMode(#PB_2DDrawing_Default)
Circle(x_source, y_source, Taille_x, image_tab(x_source, y_source))
Case 6
DrawingMode(#PB_2DDrawing_Outlined)
Ellipse(x_source, y_source, Taille_x * 4, Taille_x, image_tab(x_source, y_source))
Case 7
DrawingMode(#PB_2DDrawing_Default)
Ellipse(x_source, y_source, Taille_x * 4, Taille_x, image_tab(x_source, y_source))
Case 8
DrawingMode(#PB_2DDrawing_Outlined)
Ellipse(x_source, y_source, Taille_x, Taille_x * 4, image_tab(x_source, y_source))
Case 9
DrawingMode(#PB_2DDrawing_Default)
Ellipse(x_source, y_source, Taille_x, Taille_x * 4, image_tab(x_source, y_source))
EndSelect
MAJ_event()
Next i
StopDrawing()
MAJ_dessin()
ProcedureReturn EXIT
EndProcedure
Procedure peint_vermicelle(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, Phase, delay_affichage, Array image_tab(2))
;- le Pinceau vermicelle
; By Dobro, widely 'touched' by Graph100 ;)
EXIT = #False
If delay_affichage = 0 : delay_affichage = 1 : EndIf
SetGadgetAttribute(ProgressBar_0, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
ratio.d = largeur / Hauteur
StartDrawing(ImageOutput(#image_Sortie))
For i = 1 To nombre_de_coup_de_pinceau
If i % delay_affichage = 0
StopDrawing()
SetGadgetState(ProgressBar_0, i)
MAJ_dessin()
StartDrawing(ImageOutput(#image_Sortie))
EndIf
x_source = Random(largeur - 1)
y_source = Random(hauteur - 1)
De = Random(2, 1)
Select Phase
Case 1 To 4
If De = 1
For t=1 To 20
x_source=x_source+Random(Taille_x)
y_source=y_source+Random(Taille_y)
If x_source < 0 : x_source = 0 : EndIf
If x_source >= largeur : x_source = largeur-1 : EndIf
If y_source < 0 : y_source = 0 : EndIf
If y_source >= Hauteur : y_source = Hauteur-1 : EndIf
Circle(x_source,y_source,Taille_x,image_tab(x_source, y_source))
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)
If x_source < 0 : x_source = 0 : EndIf
If x_source >= largeur : x_source = largeur-1 : EndIf
If y_source < 0 : y_source = 0 : EndIf
If y_source >= Hauteur : y_source = Hauteur-1 : EndIf
Circle(x_source,y_source,Taille_x,image_tab(x_source, y_source))
Next t
EndIf
Case 5 To 6
If De =1
For t=1 To 40
x_source=x_source+Random(Taille_x)
y_source=y_source+Random(Taille_y)
If x_source < 0 : x_source = 0 : EndIf
If x_source >= largeur : x_source = largeur-1 : EndIf
If y_source < 0 : y_source = 0 : EndIf
If y_source >= Hauteur : y_source = Hauteur-1 : EndIf
Circle(x_source,y_source,Taille_x,image_tab(x_source, y_source))
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)
If x_source < 0 : x_source = 0 : EndIf
If x_source >= largeur : x_source = largeur-1 : EndIf
If y_source < 0 : y_source = 0 : EndIf
If y_source >= Hauteur : y_source = Hauteur-1 : EndIf
Circle(x_source,y_source,Taille_x,image_tab(x_source, y_source))
Next t
EndIf
Case 7 To 8
If De =1
For t=1 To 10
x_source=x_source+Random(Taille_x)
y_source=y_source+Random(Taille_y)
If x_source < 0 : x_source = 0 : EndIf
If x_source >= largeur : x_source = largeur-1 : EndIf
If y_source < 0 : y_source = 0 : EndIf
If y_source >= Hauteur : y_source = Hauteur-1 : EndIf
Circle(x_source,y_source,Taille_x,image_tab(x_source, y_source))
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)
If x_source < 0 : x_source = 0 : EndIf
If x_source >= largeur : x_source = largeur-1 : EndIf
If y_source < 0 : y_source = 0 : EndIf
If y_source >= Hauteur : y_source = Hauteur-1 : EndIf
Circle(x_source,y_source,Taille_x,image_tab(x_source, y_source))
Next t
EndIf
Case 9
If De =1
For t=1 To 20
x_source=x_source+Random(Taille_x)
y_source=y_source+Random(Taille_y)
If x_source < 0 : x_source = 0 : EndIf
If x_source >= largeur : x_source = largeur-1 : EndIf
If y_source < 0 : y_source = 0 : EndIf
If y_source >= Hauteur : y_source = Hauteur-1 : EndIf
Circle(x_source,y_source,Taille_x,image_tab(x_source, y_source))
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)
If x_source < 0 : x_source = 0 : EndIf
If x_source >= largeur : x_source = largeur-1 : EndIf
If y_source < 0 : y_source = 0 : EndIf
If y_source >= Hauteur : y_source = Hauteur-1 : EndIf
Circle(x_source,y_source,Taille_x,image_tab(x_source, y_source))
Next t
EndIf
EndSelect
MAJ_event()
Next i
StopDrawing()
MAJ_dessin()
ProcedureReturn EXIT
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, widely 'touched' by Graph100 ;)
EXIT = #False
If delay_affichage = 0 : delay_affichage = 1 : EndIf
SetGadgetAttribute(ProgressBar_0, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
ratio.d = largeur / Hauteur
StartDrawing(ImageOutput(#image_Sortie))
For i = 1 To nombre_de_coup_de_pinceau
If i % delay_affichage = 0
StopDrawing()
SetGadgetState(ProgressBar_0, i)
MAJ_dessin()
StartDrawing(ImageOutput(#image_Sortie))
EndIf
x_source = Random(largeur - 1)
y_source = Random(hauteur - 1)
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_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_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_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_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_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_Default )
;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,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 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,RGB(Red(Couleur_ref),Green(Couleur_ref),Blue(Couleur_ref)))
Next nb
EndIf
MAJ_event()
Next i
StopDrawing()
MAJ_dessin()
ProcedureReturn EXIT
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, widely 'touched' by Graph100 ;)
EXIT = #False
If delay_affichage = 0 : delay_affichage = 1 : EndIf
SetGadgetAttribute(ProgressBar_0, #PB_ProgressBar_Maximum, nombre_de_coup_de_pinceau)
ratio.d = largeur / Hauteur
StartDrawing(ImageOutput(#image_Sortie))
For i = 1 To nombre_de_coup_de_pinceau
If i % delay_affichage = 0
StopDrawing()
SetGadgetState(ProgressBar_0, i)
MAJ_dessin()
StartDrawing(ImageOutput(#image_Sortie))
EndIf
x_source = Random(largeur - 1)
y_source = Random(hauteur - 1)
Couleur_ref=image_tab(x_source,y_source) ; recup la Couleur
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
MAJ_event()
Next i
StopDrawing()
MAJ_dessin()
ProcedureReturn EXIT
EndProcedure
; PROCEDURE de lancement du dessin
;{ Structure et macro répétée
Structure Parametre_pinceaux
nombre_de_coup_de_pinceau.l
Taille_x.l
Taille_y.l
delay_affichage.l
EndStructure
Macro ADD_phase(nb_coup_pinceau, T_x, T_y, NB_de_mise_a_jour)
AddElement(Phase_dessin())
Phase_dessin()\nombre_de_coup_de_pinceau = nb_coup_pinceau
Phase_dessin()\Taille_x = T_x
Phase_dessin()\Taille_y = T_y
Phase_dessin()\delay_affichage = nb_coup_pinceau / NB_de_mise_a_jour
EndMacro
;}
Procedure MAIN_Expressionnisme1(largeur,Hauteur)
;{ en-tête
SetGadgetText(Text_4_Info, "Copie de l'image")
Dim image_tab(largeur, Hauteur)
INIT(largeur, Hauteur, image_tab())
NewList Phase_dessin.Parametre_pinceaux()
;}
surface = largeur * Hauteur
ADD_phase(surface / 1500, 100, 100, 10)
ADD_phase(surface / 650, 50, 50, 10)
ADD_phase(surface / 320, 15, 15, 10)
ADD_phase(surface / 200, 10, 10, 10)
ADD_phase(surface / 130, 8, 8, 10)
ADD_phase(surface / 120, 2, 2, 10)
ADD_phase(surface / 110, 3, 3, 10)
ADD_phase(surface / 80, 2, 2, 10)
ADD_phase(surface / 50, 1, 1, 10)
ForEach Phase_dessin()
SetGadgetText(Text_4_Info, "Phase " + Str(ListIndex(Phase_dessin())+1) + "/" + Str(ListSize(Phase_dessin())))
If peint_impres(largeur, Hauteur, Phase_dessin()\nombre_de_coup_de_pinceau, Phase_dessin()\Taille_x, Phase_dessin()\Taille_y, Phase_dessin()\delay_affichage, image_tab()) = #True
Break
Else
Beep_(660,50)
EndIf
Next
Beep_(880,100)
SetGadgetText(Text_4_Info, "Terminé !")
EndProcedure
Procedure MAIN_croix(Largeur,Hauteur)
;{ en-tête
SetGadgetText(Text_4_Info, "Copie de l'image")
Dim image_tab(largeur, Hauteur)
INIT(largeur, Hauteur, image_tab())
NewList Phase_dessin.Parametre_pinceaux()
;}
surface = largeur * Hauteur
ADD_phase(surface / 20000, 100, 100, 10)
ADD_phase(surface / 1300, 50, 50, 10)
ADD_phase(surface / 260, 20, 20, 10)
ADD_phase(surface / 200, 10, 10, 10)
ADD_phase(surface / 100, 4, 4, 10)
ADD_phase(surface / 80, 2, 2, 10)
ADD_phase(surface / 40, 1, 1, 10)
ForEach Phase_dessin()
SetGadgetText(Text_4_Info, "Phase " + Str(ListIndex(Phase_dessin())+1) + "/" + Str(ListSize(Phase_dessin())))
If peint_croix(largeur, Hauteur, Phase_dessin()\nombre_de_coup_de_pinceau, Phase_dessin()\Taille_x, Phase_dessin()\Taille_y, Phase_dessin()\delay_affichage, image_tab()) = #True
Break
Else
Beep_(660,50)
EndIf
Next
Beep_(880,100)
SetGadgetText(Text_4_Info, "Terminé !")
EndProcedure
Procedure MAIN_croix2(Largeur,Hauteur)
;{ en-tête
SetGadgetText(Text_4_Info, "Copie de l'image")
Dim image_tab(largeur, Hauteur)
INIT(largeur, Hauteur, image_tab())
NewList Phase_dessin.Parametre_pinceaux()
;}
surface = largeur * Hauteur
ADD_phase(surface / 20000, 100, 100, 10)
ADD_phase(surface / 1300, 50, 50, 10)
ADD_phase(surface / 260, 20, 20, 10)
ADD_phase(surface / 200, 10, 10, 10)
ADD_phase(surface / 100, 4, 4, 10)
ADD_phase(surface / 80, 2, 2, 10)
ADD_phase(surface / 15, 1, 1, 10)
ForEach Phase_dessin()
SetGadgetText(Text_4_Info, "Phase " + Str(ListIndex(Phase_dessin())+1) + "/" + Str(ListSize(Phase_dessin())))
If peint_croix2(largeur, Hauteur, Phase_dessin()\nombre_de_coup_de_pinceau, Phase_dessin()\Taille_x, Phase_dessin()\Taille_y, Phase_dessin()\delay_affichage, image_tab()) = #True
Break
Else
Beep_(660,50)
EndIf
Next
Beep_(880,100)
SetGadgetText(Text_4_Info, "Terminé !")
EndProcedure
Procedure MAIN_Vermicelle(Largeur,Hauteur)
;{ en-tête
SetGadgetText(Text_4_Info, "Copie de l'image")
Dim image_tab(largeur, Hauteur)
INIT(largeur, Hauteur, image_tab())
NewList Phase_dessin.Parametre_pinceaux()
;}
surface = largeur * Hauteur
ADD_phase(surface / 20000, 100, 100, 10)
ADD_phase(surface / 13100, 50, 50, 10)
ADD_phase(surface / 2600, 4, 4, 10)
ADD_phase(surface / 100, 3, 3, 10)
ADD_phase(surface / 100, 2, 2, 10)
ADD_phase(surface / 100, 1, 1, 10)
ADD_phase(surface / 100, 1, 1, 10)
ADD_phase(surface / 20, 1, 1, 10)
ADD_phase(surface / 15, 1, 1, 10)
;-le Style Vermicelle
; by Dobro
ForEach Phase_dessin()
SetGadgetText(Text_4_Info, "Phase " + Str(ListIndex(Phase_dessin())+1) + "/" + Str(ListSize(Phase_dessin())))
If peint_vermicelle(largeur, Hauteur, Phase_dessin()\nombre_de_coup_de_pinceau, Phase_dessin()\Taille_x, Phase_dessin()\Taille_y, ListIndex(Phase_dessin()) + 1, Phase_dessin()\delay_affichage, image_tab()) = #True
Break
Else
Beep_(660,50)
EndIf
Next
Beep_(880,100)
SetGadgetText(Text_4_Info, "Terminé !")
EndProcedure
Procedure MAIN_Pointillism(largeur,Hauteur)
;{ en-tête
SetGadgetText(Text_4_Info, "Copie de l'image")
Dim image_tab(largeur, Hauteur)
INIT(largeur, Hauteur, image_tab())
NewList Phase_dessin.Parametre_pinceaux()
;}
surface = largeur * Hauteur
ADD_phase(surface / 1500, 100, 100, 10)
ADD_phase(surface / 650, 50, 50, 10)
ADD_phase(surface / 330, 10, 10, 10)
ADD_phase(surface / 200, 5, 5, 10)
ADD_phase(surface / 135, 4, 4, 10)
ADD_phase(surface / 120, 3, 3, 10)
ADD_phase(surface / 110, 3, 3, 10)
ADD_phase(surface / 80, 2, 2, 10)
ADD_phase(surface / 40, 1, 1, 10)
;- le Style pointillisme
; by Dobro
ForEach Phase_dessin()
SetGadgetText(Text_4_Info, "Phase " + Str(ListIndex(Phase_dessin())+1) + "/" + Str(ListSize(Phase_dessin())))
If peint_pointillism(largeur, Hauteur, Phase_dessin()\nombre_de_coup_de_pinceau, Phase_dessin()\Taille_x, Phase_dessin()\Taille_y, Phase_dessin()\delay_affichage, image_tab()) = #True
Break
Else
Beep_(660,50)
EndIf
Next
Beep_(880,100)
SetGadgetText(Text_4_Info, "Terminé !")
EndProcedure
Procedure MAIN_Flocon(largeur,Hauteur)
;{ en-tête
SetGadgetText(Text_4_Info, "Copie de l'image")
Dim image_tab(largeur, Hauteur)
INIT(largeur, Hauteur, image_tab())
NewList Phase_dessin.Parametre_pinceaux()
;}
surface = largeur * Hauteur
ADD_phase(surface / 520, 100, 100, 10)
ADD_phase(surface / 650, 50, 50, 10)
ADD_phase(surface / 320, 30, 30, 10)
ADD_phase(surface / 200, 20, 20, 10)
ADD_phase(surface / 135, 10, 10, 10)
ADD_phase(surface / 110, 8, 8, 10)
ADD_phase(surface / 110, 5, 5, 10)
ADD_phase(surface / 80, 3, 3, 10)
ADD_phase(surface / 40, 2, 2, 10)
;- le Style Flocon
; by Dobro
ForEach Phase_dessin()
SetGadgetText(Text_4_Info, "Phase " + Str(ListIndex(Phase_dessin())+1) + "/" + Str(ListSize(Phase_dessin())))
If peint_flocon(largeur, Hauteur, Phase_dessin()\nombre_de_coup_de_pinceau, Phase_dessin()\Taille_x, Phase_dessin()\Taille_y, Phase_dessin()\delay_affichage, image_tab()) = #True
Break
Else
Beep_(660,50)
EndIf
Next
Beep_(880,100)
SetGadgetText(Text_4_Info, "Terminé !")
EndProcedure
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_0))
WritePreferenceLong ("WindowY", WindowY(Window_0))
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)
PreferenceGroup("Path")
File_image$=ReadPreferenceString("chemin image", "c:\")
ClosePreferences()
EndIf
EndProcedure
;} *************** fin Zone des Procedures ******************************
;{ *************** Démarrage du programme *******************************
;- ******** Démarrage du programme ********
Read_preference()
OpenWindow_0()
AddGadgetItem(Combobox_0, -1, "Dobro : Createur du truc")
AddGadgetItem(Combobox_0, -1, "Graph100 : Optimiseur du truc")
SetGadgetState(Combobox_0, 0)
; Timer pour changer l'affichage des codeurs
AddWindowTimer(Window_0, 0, 5000)
;} **********************************************************************
;{ *************** initialisations de la listes des Styles **************
;- ******** initialisations de la listes des Styles ********
AddGadgetItem(ListView_0, 0, "Flocon") : SetGadgetItemData(ListView_0, 0, @MAIN_Flocon())
AddGadgetItem(ListView_0, 0, "Pointillisme") : SetGadgetItemData(ListView_0, 0, @MAIN_Pointillism())
AddGadgetItem(ListView_0, 0, "Vermicelles") : SetGadgetItemData(ListView_0, 0, @MAIN_Vermicelle())
AddGadgetItem(ListView_0, 0, "Croix vides") : SetGadgetItemData(ListView_0, 0, @MAIN_croix2())
AddGadgetItem(ListView_0, 0, "Croix") : SetGadgetItemData(ListView_0, 0, @MAIN_croix())
AddGadgetItem(ListView_0, 0, "Impressionnisme") : SetGadgetItemData(ListView_0, 0, @MAIN_Expressionnisme1())
SetGadgetState(ListView_0, 0)
;} **********************************************************************
;{ ********************* boucle principale ******************************
;- ******** Boucle Principale ********
EXIT.b = #False
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
;{ Traitement des event des gadgets
Select EventGadget()
Case ListView_0 ; on a choisi un style ?
Style = GetGadgetState(ListView_0)
Case Button_0_SaveImage
If IsImage(#image_sortie)
File_image_save$ = SaveFileRequester("Load Picture", GetFilePart(File_image$), "*.png", 1)
If File_image_save$ <> ""
If Right(File_image_save$, 4) <> ".png" : File_image_save$ + ".png" : EndIf
SaveImage(#image_sortie, File_image_save$, #PB_ImagePlugin_PNG)
EndIf
Else
MessageRequester("Warning", "There is no picture to save.")
EndIf
Case Button_0_LoadImage
File_image$ = OpenFileRequester("Load Picture", File_image$, "Image files|*.jpg;*.png;*.bmp|*.jpg|*.jpg|*.png|*.png|*.bmp|*.bmp|*.*|*.*", 0)
If File_image$ <> ""
LoadImage(#image_reference, File_image$)
If IsImage(#image_Sortie) : FreeImage(#image_Sortie) : EndIf
EndIf
Case Button_1_Draw
;{ Lancement du dessin
If IsImage(#image_reference)
DisableDebugger
SetGadgetText(Text_4_Info, "")
largeur = ImageWidth(#image_reference)
Hauteur = ImageHeight(#image_reference)
; ***** ne pas toucher, sert à l'appel des Styles **
CreateImage(#image_Sortie, largeur, Hauteur)
If style <> - 1
CallFunctionFast(GetGadgetItemData(ListView_0, Style), Largeur, Hauteur)
EndIf
; **************************************************
EnableDebugger
EndIf
SetGadgetState(ProgressBar_0, 0)
;}
EndSelect
;}
Case #PB_Event_Timer
;{ Timers
Select EventTimer()
Case 0
SetGadgetState(Combobox_0, (GetGadgetState(Combobox_0) + 1) % CountGadgetItems(Combobox_0))
EndSelect
;}
Case #PB_Event_SizeWindow
;{ Redimensionnement des gadgets
ResizeGadgetsWindow_0()
If IsImage(#image_Sortie)
StartDrawing(CanvasOutput(Canvas_1_Display))
Box(0, 0, GadgetWidth(Canvas_1_Display), GadgetHeight(Canvas_1_Display), 0)
ratio_gadget.d = GadgetWidth(Canvas_1_Display) / GadgetHeight(Canvas_1_Display)
ratio_image.d = ImageWidth(#image_Sortie) / ImageHeight(#image_Sortie)
If ratio_gadget > ratio_image
DrawImage(ImageID(#image_Sortie), 0, 0, GadgetHeight(Canvas_1_Display) * ratio_image, GadgetHeight(Canvas_1_Display))
Else
DrawImage(ImageID(#image_Sortie), 0, 0, GadgetWidth(Canvas_1_Display), GadgetWidth(Canvas_1_Display) / ratio_image)
EndIf
StopDrawing()
EndIf
;}
Case #PB_Event_CloseWindow
EXIT = #True
EndSelect
Until EXIT
;} *************** fin boucle principale ********************************
;{ ********************* Cloture du Programme ***************************
;- ******** Cloture du Programme ********
Write_preference()
End
;} *************** fin Cloture du Programme *****************************