
Il fonctionne comme le FillArea() de PureBasic mais au lieu de remplir avec une couleur , ma commande remplit avec une texture.
Je vous explique comment l’utilisé : (c’est vraiment simple)
Vous faite au début avec vos déclarations load_image_de_remplissage("c:\votre_image.png")
Et voilà c’est tout.
Pour remplir une forme, vous tapez ça : texture_painture(X),Y,ID)
Avec X et Y le coordonnées, et ID c’est ID de SpriteOutput par exemple.
Y’a aussi une variable que j’ai nommé Mode. Au début elle a une valeur 1 , changer ça valeur pour changer de style de remplissage. Attention 1<=Mode<=infini
=> je vous ai même fait un petit Code d’exemple :
<>Dessinez sur l’écran avec la souris en cliquant sur le bouton Gauche , par exeple dessinez une forme à remplir , mais fait attention à ne pas laisser de fuite ,car même une fuite de 1 pixel gâche tout , comme dans Paint de windonws , si une forme reste ouverte avec seulement un pixel le remplissage colorie tout l’écran.
<>Cliquez sur le bouton Droit de la souris à l’intérieur de votre forme préalablement dessinée pour la remplir avec la texture.
<>Enfin Echap pour Quitter.
Code : Tout sélectionner
; -----------------------
;| By MYTIC |
; -----------------------
;PureBasic v: 4.01
InitSprite()
InitKeyboard()
InitMouse()
UsePNGImageDecoder()
OpenWindow(0,0,0,300,300,"demo")
OpenWindowedScreen(WindowID(0),0,0,300,300,0,0,0)
Global Dim image.l(999,999)
Global maxix.L
Global maxiy.L
Global mode.l = 1 ; style de remplissage (changer le avec des valeur réel =>1 pour voir d'autre effets de remplissage)
Procedure load_image_de_remplissage(fichier.s)
LoadImage(0,fichier)
maxix = ImageWidth(0)
maxiy = ImageHeight(0)
StartDrawing(ImageOutput(0))
For y = 0 To ImageHeight(0)
For x = 0 To ImageWidth(0)
image(x,y) = Point(x,y)
Next x
Next y
StopDrawing()
EndProcedure
Procedure.l correction_de_deppassement(zone.l,valeur.l)
r.f = (valeur/zone)
r = r - Val(Str(r))
r = Val(Str(r * zone))
If r < 0
r = Sqr(r*r)*mode
EndIf
ProcedureReturn r
EndProcedure
Procedure.l get_couleur_image(x.l,y.l)
x = correction_de_deppassement(maxix,x)
y = correction_de_deppassement(maxiy,y)
ProcedureReturn image(x,y)
EndProcedure
Procedure texture_painture(x.l,y.l,ID.l)
cr = RGB(244,244,244)
StartDrawing(ID)
FillArea(x, y, -1, cr)
For y = 0 To 299
For x = 0 To 299
c = Point(x,y)
If c = cr
Plot(x,y,get_couleur_image(x,y))
EndIf
Next x
Next y
StopDrawing()
EndProcedure
MessageRequester("INFO" , "Boutton droit (souris) = remplissage | Boutton gauche (souris) = dessiner les contoures | Echape = END")
;------------------------------------(exemple d'utilisation)
CreateSprite(0,300,300)
CreateSprite(1,10,10)
StartDrawing(SpriteOutput(1))
Circle(5,5,3,46236)
StopDrawing()
load_image_de_remplissage("c:\image.png") ;---------- !!!! changez l'adresse vers une image à vous
Repeat
ExamineMouse()
If MouseButton(#PB_MouseButton_Left)
StartDrawing(SpriteOutput(0))
Circle(MouseX(),MouseY(),3,255)
StopDrawing()
EndIf
If MouseButton(#PB_MouseButton_Right)
ID = SpriteOutput(0)
texture_painture(MouseX(),MouseY(),ID) ;----------(le FillArea() version Moi)
EndIf
DisplaySprite(0,0,0)
DisplayTransparentSprite(1,MouseX(),MouseY())
FlipBuffers()
WaitWindowEvent()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
End
