Page 7 sur 12

Re: Pure_Autopaint

Publié : ven. 22/févr./2013 12:42
par Backup
nouvelle Version
http://michel.dobro.free.fr/download.php?view.40

au menu quelques bugs de corrigé et surtout utilisation d'icones pour le choix d'un Style :)

le Dossier "Icone_brush" fait son apparition , il ne sert qu'au moment de compiler ..
pour l'inclusion des Icones de la liste des Styles ...

bon je vais maintenant Fabriquer d'autre "Style/pinceau/Brush" :)

j'ai fait une test vite fait en utilisant la Brosse 1 et ensuite avec ma tablette le Style Reel en petit touches pour faire remonter
la "cohérence" :)
Photo Originale
Image
Image

Ne dirai t'on pas une vraie peinture a l'huile ?? :D

Re: Pure_Autopaint

Publié : ven. 22/févr./2013 18:07
par Backup
Nouvelle Version
http://michel.dobro.free.fr/download.php?view.40

Ajout de 16 Brush , et en plus ça marche :)

mais a l'utilisation je changerai peut etre la façon de choisir tout le bin's

@Frenchy : pas encore fait ta modif

Pure_Autopaint change de nom :)
il S'appelle dorénavant "Barbouille"

Re: Barbouille

Publié : ven. 22/févr./2013 19:27
par Frenchy Pilou
Il semble qu'il manque tous les dossiers annexes pour que l'exe Barbouillant puisse démarrer! ;)
le changement de nom ne doit pas être étranger à tout cela :)

Re: Barbouille

Publié : ven. 22/févr./2013 20:35
par cederavic
Effectivement, il manque toute les images brush et icone_brush dans l'archive...

Ca serait bien de rajouter le flag #PB_Window_ScreenCentered lors de la création de la fenetre

J'ai fait ce bout de code aussi pour garder le ratio largeur / hauteur (bah ouai, ma ptite gommette est pas belle avec la tete ecrasee :P )

Code : Tout sélectionner

                ;- GadgetEvent : #bouton_charge_image
		Case #bouton_charge_image
		
		File_image$=OpenFileRequester("Load Picture",File_image$,"*.jpg|*.jpg|*.png|*.png|*.bmp|*.bmp|*.*|*.*",0)
		If File_image$<>""
			LoadImage(#image_reference,File_image$)
			x_image_origine=ImageWidth(#image_reference)
			y_image_origine=ImageHeight(#image_reference)
			
			;- MODIF CED
			; Garde le ratio original de l'image
		  tmpImg = CopyImage(#image_reference, #PB_Any)
		  ratioX.d = x_image_origine / 1024
		  ratioY.d = y_image_origine / 768
		  If ratioX > ratioY 
		    ratio.d = ratioX
		  Else
		    ratio.d = ratioY
		  EndIf
		  ResizeImage(tmpImg, x_image_origine / ratio, y_image_origine / ratio)
		  ResizeImage(#image_reference,1024,768)
		  StartDrawing(ImageOutput(#image_reference))
		    Box(0, 0, 1024, 768, 0)
		    DrawImage(ImageID(tmpImg), 512 - ImageWidth(tmpImg) / 2, 384 - ImageHeight(tmpImg) / 2)
		  StopDrawing()
		  FreeImage(tmpImg)
			
			; *****ne pas toucher servira dans tout les Styles ******
			
			INIT(1024, 768,image_tab())
			; **************************************************
		EndIf
Concernant ma proc un peut byzard, c'est qu'au depart tu dessinais directement dans un screen ducoup je ne pouvais pas utiliser l'alpha, pour ça que je passais par une image temporaire.
Maintenant que tu utilise un Canvas, ça doit etre convertissable pour ne plus utiliser d'image temporaire.

Re: Barbouille

Publié : ven. 22/févr./2013 22:03
par Backup
cederavic a écrit :Effectivement, il manque toute les images brush et icone_brush dans l'archive...

Ca serait bien de rajouter le flag #PB_Window_ScreenCentered lors de la création de la fenetre

J'ai fait ce bout de code aussi pour garder le ratio largeur / hauteur (bah ouai, ma ptite gommette est pas belle avec la tete ecrasee :P ).
ben normalement il n'y a pas besoin de faire de modif , depuis quelques version
je sauve le format de l'image , avec

Code : Tout sélectionner

x_image_origine=ImageWidth(#image_reference)
y_image_origine=ImageHeight(#image_reference)
(d'ailleurs tu les cites toi meme ces lignes :) )
puis je rétabli ce format a la sauvegarde

Code : Tout sélectionner

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
c'est un peu tordu , mais ça marche :)

pendant le dessin on est un peu déformé , mais le format est rétabli une fois sauvegardé ... c'est l’essentiel :)


excusez pour l'oubli des dossiers ...




je viens de faire une nouvelle version
http://michel.dobro.free.fr/download.php?view.40

un logo Barbouille a fait son apparition
j'ai aussi corrigé un petit bug a l'utilisation de la souris, le click pouvait donner l'impression qu'il continuait a etre appuyé

j'ai ajouté une petite image de contrôle comme me l'a demandé Frenchy
j'ai aussi ajouté les touches fléchées haut/bas pour augmenter /diminuer la taille_x /_y du pinceau actif en mode dessin a la main ...

ps : je changerai la couleur de mes brosses .. car Vert sur Vert ... :mrgreen:
(ya des fois , je dois etre tres con :lol: )

ha oui , j'allais oublier , toutes les images sont Catché !! donc le programme est autonome , pas de Dossier a faire suivre ..

Re: Barbouille

Publié : ven. 22/févr./2013 23:13
par cederavic
Je viens de voir que l'image est resize a nouveau a l'enregistrement....
Ayant vu l'image deformée dans la canvas, j'ai pas cherché plus loin :P

Mais ducoup le resultat final est quand meme déformé (par exemple j'ai une image beaucoup plus large que haute, au final on voit clairement qu'elle a été reduite en largeur puis re-agrandie)

Il faudrait soit travailler sur des dimension fixe : dans ce cas resize de l'image au chargement en tenant compte du ratio, travail sur dimension fixe, sauvegarde au dimensions fixe. soit travailler sur les dimensions d'origine : dans ce cas on garde les dimensions au chargement de l'image, travail sur dimension originales, sauvegarde au dimensions originales.

En me basant sur la premiere option (avec mon code pour le chargement, et en commentant le resize a la sauvegarde), et en ayant modifier un peut mon style j'obtient ça (Je n'ai pas chercher la compatibilité avec le mode peinture a la main, le style n'etant vraiment pas fait pour ça...) :

Image

Image

Image

Image

Image


Les photos de l'audi font un peut fouilli... Encore de l'equilibrage a faire!
Voici les procs :

Code : Tout sélectionner

Procedure cederavic(Largeur,Hauteur,Array image_tab(2))
;-le Style Cederavic
; by Cederavic
; NE PAS PRENDRE CE STYLE COMME MODEL !!!!
; Sa structure empeche l'utilisation en dessin a main levée !!!
;{ ***************** NE PAS TOUCHER *********************************************************
If state_case=#PB_Checkbox_Checked   ; semi mode automatique
	nombre_de_coup_de_pinceau=Val(GetGadgetText(#Gadget_nb_de_coup_de_peint))
	Taille_x=Val(GetGadgetText(#Gadget_taille_x)) 
	Taille_y=Val(GetGadgetText(#Gadget_taille_y)) 
	If Taille_x<=0:Taille_x=1:EndIf  :If Taille_x>=largeur:Taille_x=1023:EndIf 
	If Taille_y<=0:Taille_y=1:EndIf ::If Taille_y>=Hauteur:Taille_y=767:EndIf 
	Transparence=Val(GetGadgetText(#Gadget_transparence)) 
	Phase=Random(3,2)
	annule()
	peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 1000,Transparence , image_tab())
	SetGadgetText(#Gadget_text, "Terminé !")
	ProcedureReturn
	
EndIf
annule()
;} *********************************************************************************************
; ici libre : 
Phase=1
nombre_de_coup_de_pinceau=200
SetGadgetText(#Gadget_text, "Phase 1/4")

peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,128,32, 20, Transparence ,image_tab())
Beep_(440,50)

Phase=2
nombre_de_coup_de_pinceau=2000
SetGadgetText(#Gadget_text, "Phase 2/4")
peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,24,128, 20,Transparence , image_tab())
Beep_(440,50)
Phase=3

nombre_de_coup_de_pinceau=32000
SetGadgetText(#Gadget_text, "Phase 3/4")
peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,4,64, 20, Transparence ,image_tab())
Beep_(440,50)

Phase=4
nombre_de_coup_de_pinceau=1
SetGadgetText(#Gadget_text, "Phase 4/4")

peint_cederavicEdge(largeur,Hauteur,nombre_de_coup_de_pinceau, 1, #False, 2000, Transparence ,image_tab())
Beep_(880,100)

EndProcedure
Procedure.d boundMinMax(value.d, min.d, max.d)
  If value < min : value = min : EndIf
  If value > max : value = max : EndIf
  
  ProcedureReturn value
EndProcedure

Procedure getLuminance(color)
  red.d   = Red(color) * 0.30
  green.d = Green(color) * 0.59
  blue.d  = Blue(color) * 0.11
  ProcedureReturn red + green + blue;
EndProcedure

Procedure getEdgeGray(x, y, Array image_tab(2), alternate = #False)
  xB = boundMinMax(x, 0, 1024) : yB = boundMinMax(y - 1, 0, 768)
  c_up    = getLuminance(image_tab(xB, yB))
  xB = boundMinMax(x, 0, 1024) : yB = boundMinMax(y + 1, 0, 768)
  c_down  = getLuminance(image_tab(xB, yB))
  xB = boundMinMax(x - 1, 0, 1024) : yB = boundMinMax(y, 0, 768)
  c_left  = getLuminance(image_tab(xB, yB))
  xB = boundMinMax(x + 1, 0, 1024) : yB = boundMinMax(y, 0, 768)
  c_right = getLuminance(image_tab(xB, yB))
  
  xB = boundMinMax(x - 1, 0, 1024) : yB = boundMinMax(y - 1, 0, 768)
  c_upLeft    = getLuminance(image_tab(xB, yB))
  xB = boundMinMax(x + 1, 0, 1024) : yB = boundMinMax(y - 1, 0, 768)
  c_upRight   = getLuminance(image_tab(xB, yB))
  xB = boundMinMax(x - 1, 0, 1024) : yB = boundMinMax(y + 1, 0, 768)
  c_downLeft  = getLuminance(image_tab(xB, yB))
  xB = boundMinMax(x + 1, 0, 1024) : yB = boundMinMax(y + 1, 0, 768)
  c_downRight = getLuminance(image_tab(xB, yB))
  
  deltaX.d = (c_upRight + (c_right  * 2) + c_downRight) - (c_upLeft   + (c_left * 2) + c_downLeft)
  deltaY.d = (c_upLeft  + (c_up     * 2) + c_upRight)   - (c_downLeft + (c_down * 2) + c_downRight)

  If alternate = #True
    gray = Abs(deltaX) + Abs(deltaY)
  Else
    gray = Sqr(deltaX * deltaX + deltaY * deltaY)
  EndIf
  gray = boundMinMax(gray, 0, 255)
  alpha = gray / 12
  
  gray = 24 * (gray / 255)
  
  
  
  ProcedureReturn RGBA(gray, gray, gray, alpha)
EndProcedure

Procedure processEvents(delay_affichage, max)
  Static progress
  progress + 1
  If progress >= max : progress = 0 : EndIf
  If progress % delay_affichage = 0
    StopDrawing()
    progressBar.d = (progress / max) * 100
    SetGadgetState(#Gadget_scroll, progressBar)
    event = WindowEvent()
    While event
      event = WindowEvent()
      If event = #PB_Event_Gadget And EventGadget() = #Gadget_annul
        StopDrawing()
        ProcedureReturn #False
      EndIf
    Wend
    StartDrawing(CanvasOutput(#canvas))
  EndIf
  
  ProcedureReturn #True
EndProcedure

Procedure peint_cederavicEdge(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Transparence ,Array image_tab(2)) ; le pinceau Cederavic
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Minimum, 0)
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, 100)
  SetGadgetState    (#Gadget_scroll, 0)
  
  StartDrawing(CanvasOutput(#canvas))

    For x = 0 To largeur
      For y = 0 To hauteur
        DrawingMode(#PB_2DDrawing_AlphaBlend)
        Circle(x, y, Taille_x, getEdgeGray(x, y, image_tab(), Taille_y))
        If processEvents(delay_affichage, largeur * Hauteur) = #False : ProcedureReturn : EndIf
      Next
    Next
   
  StopDrawing()
EndProcedure
Procedure peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Transparence ,Array image_tab(2)) ; le pinceau Cederavic
	;-le pinceau Cederavic
	; By Cederavic
	;  NE PAS PRENRE CE PINCEAU COMME EXEMPLE DE CONSTUCTION DE PINCEAU
	SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Minimum, 0)
  SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, 100)
  SetGadgetState    (#Gadget_scroll, 0)
	
	StartDrawing(CanvasOutput(#Canvas))
		For i=1 To nombre_de_coup_de_pinceau	
		  
		  If Phase <> 3	
  		  DrawingMode(#PB_2DDrawing_Default)
  		Else
  		  DrawingMode(#PB_2DDrawing_AlphaBlend)
  		EndIf
  		; ************* ne pas toucher ***************************************
  		If flag_bouton_on=0
  			x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
  			y_source=Random(hauteur-1)
  			Else ; mode Dessin main 
  			x_source=xx_mouse
  			y_source=yy_mouse
  		EndIf
  		If x_source<0 :x_source=1:EndIf
  		If x_source>1023 :x_source=1023:EndIf
  		If y_source<0 :y_source=1:EndIf
  		If y_source>767 :y_source=767: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) * 32
  				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
  		
  		If processEvents(delay_affichage, nombre_de_coup_de_pinceau) = #False : ProcedureReturn : EndIf
  	Next i
	
  StopDrawing()


EndProcedure

Re: Barbouille

Publié : ven. 22/févr./2013 23:29
par Backup
je suis en train de corriger pas mal de bug :roll:
(l'ajout de fonctionalitée comme la prise en compte des touches flechée , m'a apporté son lots de conneries :lol:

tu veux que je remplace ton ancienne procedure ?

Re: Barbouille

Publié : ven. 22/févr./2013 23:31
par cederavic
Comme tu veux... Au depart je voulais juste l'ameliorer un peut mais au final le rendu est assez different.

Re: Barbouille

Publié : ven. 22/févr./2013 23:32
par Backup
ben c'est toi qui choise ,

si il faut ajouter un Style , faut me donner un nom , et ça va prendre plus de temps
(je suis en train de recolorer mes Brosses ... pour le menu ) :)

ps: faudra que j'essaie de le faire sur l'A1 Sline TFSI de la Frangine :)

Re: Barbouille

Publié : ven. 22/févr./2013 23:36
par cederavic
Tu n'a qu'a remplacer l'ancien :)

Désolé si mon code n'est pas simple a implementer, on a pas du tout la meme façon de coder, c'est pas facil :P (je m'en etais dejas rendu compte sur Pureanaglyphe)
Tes musique sur ton site son tout simplement genial! Ca fait 4h non stop que je les ecoute tout en codant :mrgreen:

Re: Barbouille

Publié : ven. 22/févr./2013 23:40
par Backup
cederavic a écrit :Tu n'a qu'a remplacer l'ancien :)

Désolé si mon code n'est pas simple a implementer, on a pas du tout la meme façon de coder, c'est pas facil :P (je m'en etais dejas rendu compte sur Pureanaglyphe)
Tes musique sur ton site son tout simplement genial! Ca fait 4h non stop que je les ecoute tout en codant :mrgreen:
Ma Frangine ne supporte plus de m'entendre jouer .. elle les a trop entendu

beaucoup de morceaux sont a refaire , en prenant de l'age , je les joues moins Speed , et certains différemment ( en mieux ;) ) ..
puis en écoutant, pas mal de morceaux sont un peux Faux , j'essayais une nouvelle Guitare ( Godin ASC ) et mes cordes etaient tres neuves
et se désaccordaient (faut dire que c'etait des cordes de m**de :) )
ces enregistrements dates d'au moins 7 ans :)

j'en ai d'autres a faire ..


[reedit]

pas mal ton Style :)
bien vu la Rehausse du Reel :)

Re: Barbouille

Publié : sam. 23/févr./2013 0:11
par Frenchy Pilou
Ne pas oublier le +- pour la taille en direct du pinceau à la souris pour ceux qui n'ont pas de tablette ;)

Re: Barbouille

Publié : sam. 23/févr./2013 0:16
par Backup
Frenchy Pilou a écrit :Ne pas oublier le +- pour la taille en direct du pinceau à la souris pour ceux qui n'ont pas de tablette ;)
j'ai choisi les fleches Haut et bas pour ça ... ça pose probleme ?

Re: Barbouille

Publié : sam. 23/févr./2013 12:19
par Ar-S
Frenchy Pilou a écrit :Ne pas oublier le +- pour la taille en direct du pinceau à la souris pour ceux qui n'ont pas de tablette ;)
La molette serait plus naturelle ;) avec les canvas c'est easy.

Re: Barbouille

Publié : sam. 23/févr./2013 13:34
par Backup
voila le techechargement est Réouvert :)
http://michel.dobro.free.fr/download.php?view.40

je devais corriger une multitudes de petits soucis :)
comme la couleur des Brosses dans la liste , le fond de la list pour faire ressortir les Brosses , bref pleins de truc
qui l'air de rien prennent du temps :)

Ajout d'un Logo "Barbouille" :D pour le prg
Image


et Ajout de la prise en compte des touches Flechées Haut/Bas pour le changement de taille
d'ailleurs ceci a occasionné hier que je bloque les Telechargements , car un Gros bug etait caché là :)

Ajout d'une petite image qui permet de savoir sur qu"elle image on travaille :)


@Cede , ta nouvelle procedure est dedans :)

j'ai Ajouté le Mode Edge de Cederavic dans la liste des Styles
car , c'est un mode qui permet de faire "remonter" les contours de l'image d'origine
et donc de pouvoir redonner de la cohérence au tableau :)

rien n'empeche bien sur de continuer a dessiner sur la toile , apres un ou plusieurs Application du contour :)



j'ai recalibré le mode Automatique des Brosses :)
voici un exemple obtenu en mode Automatique
Merci encore a Cederavic , avec sa routine de Edge, ça sauve pas mal la situation :)

Image


@Ar-s : je ne pense pas non
lorsqu'on dessine a la souris c'est pas évident de tourner la roulette en meme temps
de plus la solution du clavier , permet meme a ceux qui on une tablette de changer la taille des brosses
car j'ai desactivé la reconnaissance de la taille a la pression du stylet, car d'une tablette a l'autre les gens ne regle pas la sensibilité
de la pression de la meme façon , ça me posait probleme pour calibrer l'augmentation/diminution de la taille des Brosses :)

on peut tres bien utiliser la tablette et changer la taille au Fleches du clavier , et ça conviens aussi a ceux qui ont une tablette :)
je le test en permanence :)


encore un autre petit test :)

avec en mode automatique le style Brosse 12 et a la fin , 4x l'application du Edge Cederavic
sauvegarde , legere Augmentation de la luminosité sur un prg fait pour
( Cederavic , si tu veux te lancer dans un code d’éclaircissement Séparé du Edge ;) )
comme tu veux :)

Image