Barbouille

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

Re: Pure_Autopaint

Message par Backup »

@Frenchy ; je regarde ça pour apres :)


je viens de mettre en ligne une nouvelle version :)

http://michel.dobro.free.fr/download.php?view.40

on va pouvoir faire des Pinceaux facilement :)

regardez , ( et essayez ) le mode Brush1

dorénavant le prg sera accompagné d'un dossier "Brush"
des images PNG ( avec fond transparent ) pourront etre Créé comme vous voulez

et etre utilisé pour peindre :)

pour l'exemple j'ai fait une brosse comme ceci :

Image :)

la seule obligation est de faire des Brosses avec n'importe quelle couleur sur fond transparent et en 128x128 :)

je vais mettre une image exemple .. dans un petit moment :) ....

donc il est désormais possible de creer pleins de forme de pinceaux
nous pourrons alors facilement creer des "Styles" faisant appel a un ou plusieurs de ces pinceaux "image":)
ça multiplie carrement les possibilités :)


ps: j'ai désactivé la taille du pinceau en fonction de la pression du stylet .. c'etait trop galere a maitriser pour moi
ça se trouve vers la ligne 502 ...

[Reedit]
j'ai suspendu le telechargement, car il faut que j'ajoute une option de transparence a tout les pinceaux

de sorte qu'au fur a mesure des couches on puisse les rendres de plus en plus transparent, pour eviter les "patés"
crees par les petites tailles :)
Dernière modification par Backup le ven. 22/févr./2013 10:40, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pure_Autopaint

Message par Ar-S »

L'ajout de la possibilité de créer ses 'brush' est un ajout indispensable (et excellent) !
~~~~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 »

voila :D

le code a été mis a jour :)
http://michel.dobro.free.fr/download.php?view.40

on peut maintenant avoir de la transparence dans tout les modes !
les mode manuel/semi auto se serve des valeurs des gadgets du mode Semi-automatique :)
on peut ainsi peindre avec une degres de transparence, ce qui aide au fondu :)

en mode automatique , j'ai rev le calibrage de tout , puisque maintenant le mode Alphablend est Actif :)

certain mode comme le flou pointillé , demande a avoir une image a l'ecran
l'ideal c'est d'utiliser le mode "Reel" , ce mode colle des bout de l'image reel , on peut ainsi mettre a l'ecran l'image de reference
avant de dessiner dessus :)

le nouveau style Brush utilise donc, une image Png , lire message du dessus ,pour les Spécifications :)
il est tres facile de faire une Brosse (image PNG 128X128 fond Transparent :)

regardez le Style Brush dans le code , vous verrez que c'est assez simple :)

voici un exemple , utilisant la Brosse du message ci dessus (dans le dossier Brush )

gardez a l'esprit , que cette image n'utilise qu'UNE seule forme de brosse , immaginez ce qu'on pourra faire
lorsque nos Style utiliseront plusieurs Forme /taille de brush

vous remarquerez aussi mon emploi du Pinceau "Reel" pour faire remonter de la cohérence dans le dessin final

voici donc l'exemple :)
Image

ne soyez pas trop critique , comme je l'ai dit, lorsqu'on aura plusieurs forme de Brosse , ça va le faire Grave :D

il est inévitable qu'il reste peut etre quelques Bugs, soyez Cool , et remontez les ... je vais le Soigner :lol:

Voila , je vais pouvoir Repondre a Frenchy :)

Frenchy Pilou a écrit :Merci pour le bouton de la dernière chance! 8)

Suggestions :
pour ceux qui n'ont pas de tablette
une taille du pinceau à la volée par les touches + - active pendant le tracé (mode normal ou mode semi-auto)
Je vais essayer de te faire ça :)
un affichage en miniature des images utilisées ( comme cela on sait laquelle est active et si l'on a chargé quelque chose)
Le probleme , c'est que je sais pas ou le mettre ....
Un petit éditeur de forme de pinceau
Par exemple à partir de n'importe quel dessin de pinceau , lui donner des paramètres de "gravité", d'épaisseur, etc...
comme cela de simples rayons "rayonnants" depuis le centre (le Flocon), pourraient être transformés en cascade vers le bas, en cheveux etc...!
houla ... je vais y passer 20 ans :lol:
je donne deja la possibilité d'utiliser un Logiciel de Dessin (Painter,Photoshop :lol: ) pour Faire des Brosses
c'est deja un debut ... :)
PS Il semble qu'il y ait un petit bug (ou non)
en mode Vermicelle ou autre, en mode normal, le fait d'appuyer sur Draw relance le dessin depuis le départ!
il ne serait pas mieux de le reprendre où il en est avec un autre pinceau ou le même?
ou tout du moins donner le choix: cela évite de sauvegarder l'image en cours de processus, de la recharger!
En mode Automatique
certain "Style" commence par coller une image sur la toile .. c'est normal , car leur auteurs l'on voulu ainsi :)

le procedé a lieu du Début a la fin du Style ...

si tu veux pouvoir arreter un style en cour de dessin , le mieux c'est le mode "Semi-auto"
dans ce mode tu donnes le nombre de coup de pinceau ...
si a te vas , tu continues avec le meme ou un autre Style... (ça n'effacera pas la Toile )
si ça ne te vas pas , tu utilise le bouton "Annulation" , ça reviens en principe 1 cran en arriere (la derniere Opération est Annulé )

de plus dans ce mode "Semi-Automatique" tu peux lorsque le Prg est en Attente apres une étape de Dessin ,
utiliser le Style en cours pour dessiner sur la toile a la souris (ou tablette ) avec la taille, et le nombre de coup a chaque Click.. et la transparence ;)
Dernière modification par Backup le ven. 22/févr./2013 10:41, modifié 1 fois.
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Pure_Autopaint

Message par Frenchy Pilou »

Je vais essayer de te faire ça :)
merci pour eux! 8)
Le problème , c'est que je sais pas ou le mettre ....
Vers le haut il y a plein de place! :)


PS Il y a un bug sur le nom de la brosse à charger!
Du coup le programme ne se lance pas! :)
Dernière modification par Frenchy Pilou le jeu. 21/févr./2013 17:08, modifié 2 fois.
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pure_Autopaint

Message par Ar-S »

Ce serait bien que le soft détect seul la liste des brush perso.

Une petite proce à ajouter et une list chainée histoire de s'y retrouver.
De plus, ça permettrait de pas se prendre le choux avec le nom du fichier dans le LoadImage du ChargementBrush
en permettant un truc genre :

Code : Tout sélectionner

If LoadImage(#brosse_1, selectelement(Brush(),0))
Voilà la petite proce listeuse de brush

Code : Tout sélectionner

Global NewList Brush.s()

Procedure InitBrush()
      Protected BrushPath$
      ClearList (Brush())
      BrushPath$ = GetCurrentDirectory()+"Brush\"
     
            If ExamineDirectory(0, BrushPath$, "*.png")
                        While NextDirectoryEntry(0)
                               If DirectoryEntryType(0) = #PB_DirectoryEntry_File
                                           AddElement(Brush())
                                           Brush() = BrushPath$+DirectoryEntryName(0)
                                           Debug Brush()                                                                                                                                                    ;- TEST
                                                
                               EndIf
                          Wend     
FinishDirectory(0)
              EndIf
              
EndProcedure      

InitBrush()
Voilà 3 Brushs que j'ai fait vite faf, j'ai pas testé (on les voit peu car blanc sur fond transparent).
http://stock.ldvmultimedia.com/Brush/ars_branchiole.png
http://stock.ldvmultimedia.com/Brush/ars_dot_smooth.png
http://stock.ldvmultimedia.com/Brush/ars_pen1.png

Si elles marchent tu peux les ajouter à ton archive.
~~~~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
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pure_Autopaint

Message par Ar-S »

Je viens d'appliquer la chose...

Je liste les brush perso au lancement du prog, elles s'affichent automatiquement dans le listing des Styles.
j'ai inclus mes 3 brushs test dans l'archive.


J'ai modifié pas mal de trucs pour y donner en blocs donc je fais une archive.
http://stock.ldvmultimedia.com/Pure_aut ... rs_mod.zip

J'ai mis des balises
************ ARS MOD *************
; (code)
************ FIN ARS MOD *************
pour te faciliter la visualisation.

P.S : J'ai renommé #brosse_1 en #B100 dans tous le code afin de pouvoir ajouter des brush simplement (j'ai préféré commencé à 100)

---Edit---
Ligne 512

Code : Tout sélectionner

Remplacer 
AddGadgetItem(#Gadget_list_style, i, GetFilePart(Brush()) )
par
AddGadgetItem(#Gadget_list_style, i+12, GetFilePart(Brush()) )
~~~~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
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Pure_Autopaint

Message par kernadec »

bonjour Dobro
peut être que tu pourrais nous mettre un scrollArea pour régler le problème des grandes images.
j'avais fait un essai de dessin sur canvas, voilà le code
Cordialement

Code : Tout sélectionner

Enumeration
  #Window
  #Image0  
  #Image1
  #Scroll
  #canvas
  #menu0
  #menu1
  #menu2
  #menu3
  #menu4
  #menu5
  #menu6
  #menu7
  #menu8
EndEnumeration

Procedure ThickLineXY(X1.i, Y1.i, X2.i, Y2.i, Thickness.i, Color.i,rand.i) 
  ; Procedure épaisseur de : STARGATE  forum Purebasic Allemand
  Protected Length.i = Sqr((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1)) 
  Protected I, DeltaX.i, DeltaY.i 
  If Length = 0 
    Circle(X1, Y1, Thickness/2, Color) 
  Else 
    For I = 0 To Length 
      DeltaX = (X2-X1)*I/Length 
      DeltaY = (Y2-Y1)*I/Length 
      If rand=0
        Circle(X1+DeltaX, Y1+DeltaY,Thickness/2, Color) 
      Else
        Circle(X1+DeltaX, Y1+DeltaY, Random(Thickness/2), Color) 
      EndIf  
    Next 
  EndIf
EndProcedure 
Procedure elipse(x0,y0,x1,y1,r1,r2,a1,a2,Thickness,color,rand.i)
  For i=0 To 359
    r3=(Sqr(Pow(x1,2)+Pow(y1,2)))
    x2.i=x0+r3*Cos(Radian(i))
    y2.i=y0+r3*Sin(Radian(i))
    If rand=0
      Circle(X2,Y2,Thickness/2,Color) 
    Else
      Circle(X2,Y2,Random(Thickness/2),Color) 
    EndIf
  Next i
EndProcedure 
titre$="CanvasGadget"
menu=2                 ; menu defaut
CreateImage(#Image0, 2000, 2000, 24)
CreateImage(#Image1, 2000, 2000, 24)
If OpenWindow(#Window, 0, 0,650,600,titre$, #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_MinimizeGadget | #PB_Window_SizeGadget) 
  ScrollAreaGadget(#Scroll, 50, 0, 600,600, 2000, 2000, 30)         
  CanvasGadget(#canvas, 0, 0,  2000, 2000, #PB_Canvas_ClipMouse)
  SetWindowColor(#Window,#White) 
  SetGadgetColor(#Scroll,#PB_Gadget_BackColor,#White)
  SetGadgetAttribute(#Scroll,#PB_ScrollArea_X,200)
  SetGadgetAttribute(#Scroll,#PB_ScrollArea_Y,200)
  If CreateMenu(#menu0, WindowID(0))   
    MenuTitle("Choix")
    MenuItem(#menu1, "Ligne Thick Rand")
    MenuItem(#menu2, "Ligne Thick")
    MenuItem(#menu3, "Cercle")
    MenuItem(#menu4, "Cercle vide")
    MenuItem(#menu5, "Cercle vide Rand")
    MenuItem(#menu6, "Box")
    MenuItem(#menu7, "Point")
    MenuItem(#menu8, "Point rand")
  EndIf
  Repeat
    event=WaitWindowEvent()
    
    X = GetGadgetAttribute(#canvas, #PB_Canvas_MouseX)
    Y = GetGadgetAttribute(#canvas, #PB_Canvas_MouseY)
    StartDrawing(CanvasOutput(#canvas))
    If Clic_Gauche=#True
      If EventType() =  #PB_EventType_MouseMove
        DrawImage(ImageID(#Image0), 0, 0)
        DrawingMode(#PB_2DDrawing_AlphaBlend)              ; transparence avec couleur RGBA
        
        ; calcul des distances pixels entre DepartX,DepartY du debut et X,Y actuel = taille de l'élipse
        If x > DepartX:rx = x - DepartX:Else:rx = DepartX - x:EndIf       
        If y > DepartY:ry = y - DepartY:Else:ry = DepartY - y:EndIf
        If menu=1
          ThickLineXY(DepartX, DepartY, x, y, 25, lColor,1) 
          ;LineXY(DepartX, DepartY, x, y, color)            ; ligne simple
          FinX=x:FinY=y
        EndIf
        If menu=2
          ThickLineXY(DepartX, DepartY, x, y, 20, lColor,0) 
          FinX=x:FinY=y
        EndIf
        If menu=3
          Ellipse(DepartX, DepartY, rx, ry, color)
          FinX=x:FinY=y
        EndIf
        If menu=4
          elipse(DepartX,DepartY,x-DepartX,y-DepartY,r1,r2,a1,a2,16,lcolor,0)
          FinX=x:FinY=y
        EndIf
        If menu=5
          elipse(DepartX,DepartY,x-DepartX,y-DepartY,r1,r2,a1,a2,25,lcolor,1)
          FinX=x:FinY=y
        EndIf
        If menu=6
          Box(DepartX, DepartY,x-DepartX,y-DepartY,color) 
          FinX=x:FinY=y
        EndIf
      EndIf
    EndIf
    If (FinX=0 And FinY=0)                              ; mode clic gauche appuyé
      If EventType() =  #PB_EventType_MouseMove  
        DrawingMode(#PB_2DDrawing_AlphaBlend)
        Clic_Gauche=#False 
        If GetGadgetAttribute(#Canvas, #PB_Canvas_Buttons) &  #PB_Canvas_LeftButton
          If menu=7
            Circle(X,Y, 5, lcolor)
          EndIf
          If menu=8
            Circle(X,Y,Random(20), lcolor)
          EndIf
        EndIf 
      EndIf
      FinX=0:FinY=0
    EndIf   
    If EventType() = #PB_EventType_RightButtonDown And Clic_Gauche=#True
      Clic_Gauche=#False                                   ; annule fin du dessin en cours
      DrawImage(ImageID(#Image1),0,0)                      ; restore le dessin precedent
      FinX=0:FinY=0                                        ; remise à zero pour test fin ligne
    EndIf
    StopDrawing()
    Select EventType()
        
      Case #PB_EventType_LeftButtonDown
        
        If StartDrawing(ImageOutput(#Image0))
          DrawImage(GetGadgetAttribute(#canvas,#PB_Canvas_Image),0,0) ;fixe le dessin 
          StopDrawing()
        EndIf
        If Clic_Gauche=#False                               ; valide la fin du dessin avec le click gauche = 0
          Clic_Gauche=#True                                 ; debut du dessin avec le click gauche = 1
          color= RGBA(Random(255), Random(255),Random(255),150)  ; couleur aléatoire
          lcolor= RGBA(Random(255), Random(255),Random(255),150/6) 
          titre$="CanvasGadget       Color="+Str(Red(color))+"|"+Str(Green(color))+"|"+Str(Blue(color))+"|"+Str(Alpha(color))+" /6= "+Str(Alpha(lcolor)) 
          SetWindowTitle(0,titre$)
          CopyImage(#Image0,#Image1)                        ; copie Image pour eventuelle annulation
        Else
          Clic_Gauche=#False                                ; valide la fin du dessin avec le click gauche = 0
        EndIf
        DepartX = X                                         ; coordonnée DepartX Clic_Gauche
        DepartY = Y                                         ; coordonnée DepartY Clic_Gauche
        If menu=1 Or menu=2
          If (FinX<>0 And FinY<>0)
            Clic_Gauche=#True                               ; reactive le clic_Gauche pour ligne suivante
            CopyImage(#Image0,#Image1)                      ; copie Image pour eventuelle annulation
            DepartX = FinX                                  ; transfert dernier clic_Gauche FinX vers DepartX suivant mode line chainée
            DepartY = FinY                                  ; transfert dernier clic_Gauche FinY vers DepartY suivant
          EndIf
        EndIf
        
    EndSelect 
    Select event
      Case #PB_Event_Menu      
        Select EventMenu()  
          Case #menu1: menu=1:FinX=0:FinY=0  ;FinX=0:FinY=0 mis à zero = choix clic (1 ou 2)
          Case #menu2: menu=2:FinX=0:FinY=0
          Case #menu3: menu=3:FinX=0:FinY=0
          Case #menu4: menu=4:FinX=0:FinY=0
          Case #menu5: menu=5:FinX=0:FinY=0  
          Case #menu6: menu=6:FinX=0:FinY=0  
          Case #menu7: menu=7:FinX=0:FinY=0  
          Case #menu8: menu=8:FinX=0:FinY=0    
        EndSelect       
      Case #PB_Event_SizeWindow                             ; redimensione le scroll avec la fenetre
        ResizeGadget(#Scroll,#PB_Ignore,#PB_Ignore,WindowWidth(#Window)-50,WindowHeight(#Window)-20)   ; -20 = scroll horizontal et menu
        SetGadgetColor(#Scroll,#PB_Gadget_BackColor,#White)
      Case #PB_Event_CloseWindow
        quit=1
    EndSelect  
  Until quit
EndIf


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

Re: Pure_Autopaint

Message par Backup »

Merci , je regarderai tout ça Demain :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

@Ar-s : ARg !! :)

en faite , c'est de ma faute ,j'aurai du définir le Truc ....

mais pour ma défense j'ai conçut le principe en meme temps que je codais :mrgreen:
je vais donc établir le Systeme de sorte que vous compreniez ou je veux en Venir :)
(prenez le temps de lire il y en a une tartine :lol: )

une Brosse = une image Png 128x128 : fond Transparent
la toile = l'ecran sur lequel ont Dessine (le Canvas)
le Style = Procedure qui va definir les Phases de construction d'un Tableau (un style est en fait une collection de Phases :)
les Phases = sont des étapes de creation a l'interieur du Style chaque phase peut appeler un pinceau et changer une taille de pinceau
Exemple de phase dans un style :

Code : Tout sélectionner

SetGadgetText(#Gadget_text, "Phase 1/6")
Taille_x=128 ; c'est un brush (128x128)
Taille_y=128
Transparence =255
phase=1
nombre_de_coup_de_pinceau=500

annule()
Peint_brosse_1(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 600,Transparence ,image_tab()) 
le Pinceau = procedure qui sera Exploité par la procedure Style
Exemple de pinceau (utilisé avec une Brosse )

Code : Tout sélectionner

if IsImage(#brosse_1_co); la copie a eu lieu
		ResizeImage(#brosse_1_co,taille_x,taille_y) ; on met le brush a la bonne taille
		DrawAlphaImage(imageId(#brosse_1_co),x_source,y_source,Transparence)
	Endif
voila rien d'autre pour faire un Style :)



donc.. la liste du prg Sert a "Lister" les Styles
de sorte que l'utilisateur n'ait pas a se prendre la tete , il choisi un Style ,il Lance le Protocole de Dessin
soit automatique , soit en Semi-Automatique ( un automatique controlé )
soit en mode Manuel , qu'on peut considérer comme un mode de retouche :)

voila , le prg a actuellement, une Façon de procéder , qui tourne bien , et est tres Stable dans son Principe

pour un créateur de Style (comme Cederavick , BlendMan .. et d'autres je l'espere )

le Style est un Procedé de fabrication d'une "Peinture"
on peut dans un Style utiliser tout les Pinceaux Actuellement dans le prg

un pinceau peut lui , utiliser les Formes de la bibliotheque 2D (Circle,ellipse,etc ... ) mais Aussi des Brosses ;)



voila ou je veux en venir , il n'y a AUCUNE Raison , de mettre les Brosses dans la liste des Styles
( au passage ton code fout le bazars total , dans le choix des Styles, on click un Style , et c'est un autre qui Demarre ! :? :)
forcement, ils n'ont rien a faire là :) )

Pure_Autopaint, n'as pas pour vocation d'etre un logiciel de Dessin au sens , je choisi une brosse , et je peint ....
mais un logiciel qui converti une image en Style peinture ...
je choisi un Style et je peint , ou je laisse peindre l'ordinateur :)

ça n'a pas de sens , de mettre a disposition de l'utilisateur les Brosses directement ...
il faut lui proposer un Style ! qui lui, de façon invisible pour l'utilisateur, contiendra un ou plusieurs Pinceaux, qui eux contiendront une ou plusieurs Brosses


j'ai laissé les Brosses dans le Dossier des Brushs pour vous (codeur,Createurs de Styles ) puissiez avoir accés a la creation de Brosses
pour qu'ensuite vous les utilisiez dans vos Pinceaux , pour qu'ensuite Vos Styles , ... et les miens , puisse les utiliser aussi ...

a l'image du peintre qui se creer ses Brosses pour Tamponner sa toile avec :)
plus de formes, plus de possibilités , plus de choix :)

mais ces Brosses , ne doivent pas etre Accessible aux utilisateurs !!
dans l'avenir ,je comptais les intégrer au prg (include) / je vais paut etre retenir ton Scanner de dossier de Style
pour eventuellement creer un Style "De base" qui pourrai alors etre utilisé ... mais faut que je pense le truc ..c'est pas clair dans ma tete :lol:

Seule les Styles doivent etre dans la liste et sont accessible a l'utilisateur :) ... en esperant avoir été clair dans l'explication de mon prg :)

les Styles , ainsi que le Pinceaux correspondant, doivent respecter une certaine Architecture
tout ce qui est entre les Balises ;****** ne pas Toucher ****** , ne doivent pas etre touché car ce sont des lignes de codes
indispensable pour l'utilisation du prg ( mode manuel,semi-auto, Automatique ) :)

l'ideal c'est d'éviter d'utiliser une image a la place de la toile (le canvas) , pour dessiner ... comme l'a fait Cederavick ( bon ça marche bien )
mais lorsqu'il l'a fait, je n'avais pas encore defini cela :)
sinon ça complique le dessin a la main ....
enfin , si vous arrivez a faire un Style qui marche dans les 3 modes du prg , n'hesitez pas a mettre les 2 procedures de votre styles...


pour intégrer tes nouvelles Brosses il te suffit de copier la Procedure Le style brosse_1
de lui changer son nom ( Procedure brosse_1(Largeur, HAuteur, Array image_tab(2)) )
tu lui donne le nom que tu veux ...
tu change les differentes Phase du pinceau

ensuite tu vas dans ton nouveau pinceau ( les procedures qui commence par "peint_" )
tu copies le procedure peint_brosse_1(........)
tu lui donne le meme nom que le Style

et tu indique le type de Brosse que tu veux utiliser
comme ici extrait du code :

Code : Tout sélectionner

if IsImage(#brosse_1_co); la copie a eu lieu
		ResizeImage(#brosse_1_co,taille_x,taille_y) ; on met le brush a la bonne taille
		DrawAlphaImage(imageId(#brosse_1_co),x_source,y_source,Transparence)
	Endif

sinon tu me laisse faire , je les intégrerai dans le code (sous forme de pinceau) , et tu n'aura plus qu'a modifier tes styles et les Calibrer comme tu veux ...

tout ça peut parait assez lourd a lire, mais dans le principe c'est super simple :)

aucune raison de changer le Code du programme , seul les procedures de Styles et de pinceau sont a faire ... :)

je conçois que l'architecture que je dépeint (sans jeux de mots ) n'est pas forcement évident, mais au fond
si tu regarde bien , c'est simple , au lieu de cherche a mettre a dispo les Brosses , directement , tu les proposes dans un Style :)

utilisez de préférence comme modèle de construction soit les procédures ( brosse_1() et peint_brosse_1() ) pour l'utilisation d'une Brosse
et je suppose que dorénavant ce sera la norme ...car uil est plus facile de faire une forme de Brosse que de coder avec la lib 2D de purebasic :) )

soit les procédures ( Expressionnisme1() et peint_impres() ) pour les courageux de la librairie 2D de Purebasic :)

je terminerai en disant : vous pouvez faire Vos version de Ce programme
je l'ai fait openSource pour cette raison , la seule choses , si vous faites des styles intéressant, partagez les ici :)

@kernadec :
oui , bien sur , les scrollArea pourraient etre une solution , mais .. pas tres User Friendly je trouve
lorsqu'on a une tablette Graphique , c'est pas Geant de Dessiner sur une partie de la toile
et de devoir Scroller pour continuer :)

de plus ça pose un autre problème (surtout depuis l'ajout des Brosses )
une haute résolution ralentirai Gravement la totalité du prg ...
pour le moment, je trouve que ça le fait bien :)

on met l'image en 1024x768 , on travaille dessus , on sauve , et a la sortie l'image retrouve la résolution qu'elle avait au depart :)

lorsque je fait un prg , je me met a la place de Frenchy pillou :lol:
je veux qu'il ne se prenne pas la tete pour savoir comment ça marche :)

si ça vous intéresse, et pour comprendre ce que je veux faire , voici le prg qui m'a inspiré

http://dynamic-auto-painter.fr.malavida.com/

il est Shearware , mais tout fonctionne , il y a juste un Bandeau sur l'image a la Sauvegarde
Dernière modification par Backup le ven. 22/févr./2013 8:42, modifié 1 fois.
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Pure_Autopaint

Message par Frenchy Pilou »

lorsque je fais un prg , je me mets à la place de Frenchy Pilou
Oui, tout pour l'utilisateur! :D
Plus c'est simple de manipulation mieux c'est! 8)
Un des plus amusant et des plus simple mais qui pourtant utilise un fond mathématique
des attracteurs étranges entre autres, est Chaoscope! http://www.chaoscope.org/
Tout est transparent pour l'utilisateur!

Il fonctionne avec 3 touches + la souris !!! Ergonomie inégalée! 8O
http://issuu.com/frenchy_pilou/docs/chaosprotect1

Quant au ratio temps passé / réalisation, c'est de l'ordre de 1 à 5 minutes!
(surtout du temps de recherche et de positionnement de la forme)

Image
Image
Image

Qu'il ne restera plus qu'à passer à la moulinette de Pure_AutoPaint ! ;)

Brosse Floue ;)
Image
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pure_Autopaint

Message par Ar-S »

Arf mince, on peut dire que je me suis emmêlé les pinceaux :D
~~~~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 »

Ar-S a écrit :Arf mince, on peut dire que je me suis emmêlé les pinceaux :D
non , tu ne pouvais pas savoir :)

juste un autre et dernier truc ( :lol: )
lorsque tu te fait des brosses , utilise la surface des 128x128
car il s'agit de la taille Maximum affiché :)

lorsque qu'on fait un Style et un pinceau , dans la procedure j'utilise un Resize pour pouvoir
descendre possiblement la taille jusqu'a 1x1 :) donc ne pas hésiter a utiliser toute la surface des 128x128
tu gagnera en details au moment de la réduction ;)

dans le style Brosse_1 par exemple
en phase 4 je fais :

Code : Tout sélectionner

SetGadgetText(#Gadget_text, "Phase 4/6")
Taille_x=32 ; c'est un brush (32x4) du coup
Taille_y=4
Transparence =230
phase=4
nombre_de_coup_de_pinceau=1500
annule()
Peint_brosse_1(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 600,Transparence ,image_tab()) 

SetGadgetText(#Gadget_text, "Phase reel") ; histoire de raméner un peu de cohérance
Phase=6
Transparence =100
nombre_de_coup_de_pinceau=9400
Taille_x=2:Taille_y=2
peint_reel(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 600,Transparence ,image_tab()) 
ça me fait une brosse 32x4 :)
et remarque que ce Style utilise un petit coup de pinceau peint_reel() qui a comme effet de faire remonter l'image
d'origine histoire d'avoir de la cohérence

on peut de cette façon utiliser tout les autres "Pinceau" du prg , lorsqu'on se fait une Style , on peut ainsi mixer
les effets comme on veux :)
la variable " Phase " n'est là que pour informer le Pinceau , d'un choix different :)

dans l'absolu on peut faire un Style Sans programmer un pinceau
il suffit d'utiliser ceux qui existe :)

en tout cas merci de ton interet pour ce prg

@Frenchy Pilou : je vois que Pure_autopaint permet de se faire des Textures :)
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Pure_Autopaint

Message par Frenchy Pilou »

D'ailleurs il serait intéressant aussi d'avoir des brosses qui transforment l'image
en un aspect "volumes techniques"
ici obtenu avec un programme fractal, mais qui doit pouvoir se faire aussi avec des brosses
idoines! ;)

Super galerie

En fait j'ai ça (fait avec Pure_Autopaint) pour donner l'image départ
Image

et la brosse magique donne du "technologique" :)
By Jock Cooper
Image
Dernière modification par Frenchy Pilou le ven. 22/févr./2013 11:28, modifié 1 fois.
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 »

Frenchy Pilou a écrit :D'ailleurs il serait intéressant aussi d'avoir des brosses qui transforme l'image
en un aspect "volumes techniques"
ici obtenu avec un programme fractal, mais qui doit pouvoir se faire aussi avec des brosses
idoines! ;)

oui ! completement :)

il suffit de faire plusieurs pinceau brosse "Tech"
et de se faire un Style qui utilise de façon aléatoire les pinceaux Tech .. :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pure_Autopaint

Message par Backup »

ps : les Brosses n'ont pas l'obligation d'etre dessinée en blanc ...
(j'avais oublié que je me base sur ma transparence pour les coloriser :) )
Répondre