Barbouille

Programmation d'applications complexes
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pure_Autopaint

Message par Ar-S »

Dobro a écrit :Je viens de modifier le Dernier listing

de façon a avoir le nom des codeurs qui participent
et aussi de pouvoir utiliser plusieurs Style de peinture
(pour le moment 3 styles sont présent )

mais tout est prèt pour les Ajouts :)

[Reedit]

j'ai ajouté un Style , 2 Styles Croix ... en utilisant un pinceau en forme d’ellipse croisé ..
cela a pour but de montrer comment ajouter un Style :) Au Boulot !! :lol:
Modifie le code du 1er topic, ce sera plus facile à retrouver.
Je rentre chez moi et je regarde cette nouvelle version.
ça m'intéresse beaucoup :wink:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

Gallerie des Styles

LE Style "Impressionisme"

Image

Le Style "Croix"
Image

Le Style "Croix Creuse"
Image

Le Style "Vermicelle"
Image


Le Style "pointillisme"
Image


Le Style "Flocon"
Image

Le Style "Aquarelle"
Image

Le Style "Cederavic"
Image

Le Style "Pop_Art"
Image

Le Style "Brosse Floue" (Blendman)
Image

Le Style "Pointillism Floue" (Blendman)
Image

Le 1er Style Brush (Brosse)
Image
Dernière modification par Backup le jeu. 21/févr./2013 15:35, modifié 9 fois.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Pure_Autopaint

Message par blendman »

sympa tout ça :)

Tu pourrais tenter de récupérer l'alpha sur un autre tableau, et ne gérer que les pixels ayant un alpha > 0 j'imagine, du coup, paf, tu peux ajouter des calques et tout :).

HS : Ta tablette ne bugue pas avec les screens ?
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Pure_Autopaint

Message par Frenchy Pilou »

Les formes géométriques sont encore trop présentes à la fin du processus!
Il faudrait effectuer un "blur" final au autre filtre de flou non ?
Est beau ce qui plaît sans concept :)
Speedy Galerie
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

blendman a écrit : HS : Ta tablette ne bugue pas avec les screens ?
ben non pas du tout !
car j'utilise un code Specifique pour Tablette Wacom et toute tablette axé sur la Dll Wintab ;)
Frenchy Pilou a écrit :Les formes géométriques sont encore trop présentes à la fin du processus!
Il faudrait effectuer un "blur" final au autre filtre de flou non ?

ben , non :)
les formes représentent bien l'effet de "croute" les coups de pinceaux :)
"blurer" cela ajouterai du flou, rien de plus .. on perdrai en précision je pense ..

un Tableau doit rester figuratif , sinon, c'est une photo :)
peut etre en utilisant un sprite transparent en guise de pinceau ... l'effet de transparence
laissant apparaitre ce qui se trouve dessous au lieu de tout recouvrir ...
j'avais pour projet d'ajouter ça aussi :)

pour diminuer l'effet de forme géométrique, il suffit d’augmenter la derniere Phase , on gagne en précision
et on perds l'effet "texture", et diminuer la taille du pinceau


pour le moment ,
je viens d'ajouter le Mode "pointillisme" au listing numero 1 ( en haut de topic )
Dernière modification par Backup le sam. 16/févr./2013 12:42, modifié 3 fois.
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Pure_Autopaint

Message par venom »

wouah!!!! sympa ces effets. Bravo Dobro :wink: 8)






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

Merci :)


Ajout du mode "Flocon"
qui donne un genre plutot "Classique" de croute usée :lol:
Dernière modification par Backup le sam. 16/févr./2013 12:42, modifié 1 fois.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Pure_Autopaint

Message par graph100 »

Magnifique les derniers pinceaux !

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.

Pour l'ajout de nouveaux pinceaux, c'est devenus très très simple :mrgreen: :
Dans l'encart

Code : Tout sélectionner

;{ *************** initialisations de la listes des Styles **************
Il faut ajouter une ligne avant les addgadgetitem(), ça mettra le nouveau style bas de la liste !
exemple :

Code : Tout sélectionner

AddGadgetItem(ListView_0, 0, "MonStyle") : SetGadgetItemData(ListView_0, 0, @MAIN_MonStyle())
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 :D

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 *****************************

_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

@Graph100:

Comment dire ça sans te froisser ... :)

je trouve tres bien ton travail sur le code , mais vois tu , tel que tu l'a changé , je ne m'y retrouve plus ..

lorsque tu as modifié le code, au debut tu as apporté une optimisation de la vitesse , et ça c'etait top !

mais pour ce dernier code , tu changes carrément la structure de fond ... sans réellement apporter un plus de fonctionnement...

j'ai besoin de m'y retrouver , car pour le moment on ne change que la forme des pinceaux
mais j'ai pour projet d'utiliser les Sprites ,images etc ... (utilisation de la transparence)!! et sur un Canvas, ça va pas le faire !

lorsque j'ai mis le code a dispo, je ne demandais pas spécialement qu'on refonde sa Structure...
mais je m'attendais plutot a une Création d'idée concernant le Résultat , (forme de pinceau , utilisation de Pinceau Graphique)

pour le Format de l'interface utilisateur , oui j'aurai pu penser a la taille de l'interface modifiable...

le problème qui se pose a moi, c'est l'évolution du prg , ainsi construit , ça me bloque carrément
l'utilisation des sprites est compromise... ,

ce qui me bloque, c'est que tu codes tres bien, mais d'une façon plus "moderne" que moi (utilisation des adresse de Procedure, Macro ,List chainée etc ..), du coup, ton code, j'y comprends rien :lol:

comme je suis encore en phase créative, j'ai besoin de comprendre comment le code fonctionne.... :)

ce que je te propose , je vais continuer a coder sur la Version 2 ( ta version optimisé numero1 )
je vais toutefois proposer le redimensionnement de l'interface..

tu peux toujours développer ta version , que je trouve super ...
tu pourra éventuellement récupérer les pinceaux etc ... si tu arrive a les adapter a ta version :)

a ce propos cette dernière version, le pinceau Vermicelle ne fonctionne pas ! ( compare le résultat avec "ma" version )

ne le prends pas mal , j'ai mis ce code a dispo pour que justement des Programmeurs puissent en faire une Version a leur Sauce .. :)

mais perso , je préfère rester en terrain connu ...

le travail collaboratif , apporte souvent ce genre de soucis , c'est pourquoi en principe
lorsqu'un projet est mis en place, la "structure" d'un code a été donné par le créateur

les programmeurs intervenant, ne change pas cette Structure , il apporte leur procédures (routines) , mais sans changer le Squelette ...
sinon, le code part dans tout les sens :)

par exemple ,
avec Ar-s nous avons fait quelques programmes ensemble , nous ne codons pas du tout pareil..
mais lorsqu'un des deux proposait un code, l'autre s’adaptait a ce code , de sorte que l'initiateur du code, se sente "chez lui" :)

voila , en tout cas je te remercie pour ce boulot, et j'espere que tu vas continuer a le faire évoluer dans ton coin :)
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Pure_Autopaint

Message par kernadec »

bonjour
merci graph100 et Dobro pour les nouveaux styles
j'aime beaucoup le mode vermicelle.

Avec le code de graph100,
il a un ptit soucis dans le haut de l'image en mode vermicelle,
il reste toujours des résidus, alors que le reste de l'image est top

[réédite]
petite suggestion :D
avec certains styles très fins genre flocon dans les portraits, on pourrait peut être
avoir le choix de laisser le fond avec l'image originale pour éviter d'avoir par endroit
des plaques de moustiques qui se font avec le fond noir.

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

Re: Pure_Autopaint

Message par Backup »

Graph100 a écrit :@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 :D
Merci grace a toi j'ai retiré un Bug de mon EPB :)
kernadec a écrit :

petite suggestion :D
avec certains styles très fins genre flocon dans les portraits, on pourrait peut être
avoir le choix de laisser le fond avec l'image originale pour éviter d'avoir par endroit
des plaques de moustiques qui se font avec le fond noir.

Cordialement
oui , mais pour laisser le fond, il va falloir masquer !
car c'est pas évident sans cette information de déterminer "le fond" du devant de l'image ...
la seul soluce (du moins la plus simple ) c'est de laisser l'utilisateur Dessiner un Masque qui indique ce qui doit etre "Peint"
de ce qui ne doit pas l'etre :)
note que c'est faisable ( je le fait avec Pure_anaglyphe ) ... verrai un de ces 4


viens de modifier le Code de la page 1 de sorte qu'on puisse redimensionner
l'avantage du WindowedScreen par rapport au Canvas c'est que le Dessin se redimensionne tout seul :)
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Pure_Autopaint

Message par blendman »

Dobro, je vais essayer d'ajouter un pinceau de type image, qu'on pourrait utiliser avec les sprites. Je l'ai déjà fait, il faut juste que je retrouve le code ;).
Dès que je retrouve ça, je le poste ^^
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

cool :)
si t'a besoin d'info concernant le fonctionnement du prg n'hésite pas :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

je viens d'ajouter le Style aquarelle
voir la Galerie des Styles Page 2 de ce topic

c'est le premier style qui utilise en fait une peinture qui viens d'etre créé
pour celui la, je fait appel au Style "pointillisme" dans la procedure Aquarelle

ensuite j'applique un Algo ( qui faudra que j'améliore )
l'interet c'est de pouvoir intervenir apres coup , ici je dessine une ellipse avec de la transparence ...
ce qui donne le coté "Flotte" .. c'est loin d'etre parfait, mais j'établis une base de travail :)
pouvoir travailler sur la toile apres coup permet des trucs pas mal, je pense ... comme surligner les noirs, les rouge les bleu etc ..
ça ouvre la porte vers les "Aplats" par exemple :)

ici j'utilise un tremblement horizontale de la couleur du pixel lu sur .. la toile et non plus sur l'image de reference :)

ps: j'en ai profité pour sauver dans le pref la taille de la fenetre ...

Image
Dernière modification par Backup le sam. 16/févr./2013 16:32, modifié 1 fois.
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: Pure_Autopaint

Message par cederavic »

Voilas ma contrib (me suis amusé un moment, au feeling...)

Code : Tout sélectionner

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 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)
    x_source=Random(largeur-1)
    y_source=Random(hauteur-1)
    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
Et voila 3 rendu :
Image

Image

Image
Répondre