[5.20LTS]Image et fillarea
Publié : lun. 23/sept./2013 12:22
salut
J'ai essayé d'utiliser le FillArea avec une image, mais je n'ai pas réussi.
Quelque chose doit m'échapper (ou y aurait-il une sorte de bug) ?
Testé sous windows8, quand j'utilise le fillarea, ça me remplit toute l'image, qu'il y ait ou des traits dans l'image d'une autre couleur.
ça marche avec une image sans couche alpha transparente créée avec CreateImage(#IMAGE_Draw, 380, 380, 32), mais j'ai besoin d'une couche alpha pour gérer la transparence.
Code tiré de l'exemple du canvasgadget, modifié pour s'utiliser avec une image et un canvas gadget (pour l'affichage)
Merci 
J'ai essayé d'utiliser le FillArea avec une image, mais je n'ai pas réussi.
Quelque chose doit m'échapper (ou y aurait-il une sorte de bug) ?
Testé sous windows8, quand j'utilise le fillarea, ça me remplit toute l'image, qu'il y ait ou des traits dans l'image d'une autre couleur.
ça marche avec une image sans couche alpha transparente créée avec CreateImage(#IMAGE_Draw, 380, 380, 32), mais j'ai besoin d'une couche alpha pour gérer la transparence.
Code tiré de l'exemple du canvasgadget, modifié pour s'utiliser avec une image et un canvas gadget (pour l'affichage)
Code : Tout sélectionner
Enumeration
#IMAGE_Color
#IMAGE_Draw
EndEnumeration
Enumeration
#GADGET_Canvas
#GADGET_Color
#GADGET_Brush
#GADGET_Fill
#GADGET_Clear
EndEnumeration
Global CurrentColor, CurrentMode
Procedure DrawAction(x, y, EventType)
If StartDrawing(ImageOutput(#IMAGE_Draw))
DrawingMode(#PB_2DDrawing_AlphaBlend)
Select CurrentMode
Case #GADGET_Brush
If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
Circle(x, y, 5, CurrentColor)
EndIf
Case #GADGET_Fill
If EventType = #PB_EventType_LeftButtonDown
; DrawingMode(#PB_2DDrawing_Default) ; si je dé-commente, ça ressemble à #PB_2DDrawing_Alphaclip
FillArea(x, y, -1, CurrentColor) ; si je change l'alpha de currentcolor, ça ne fait que changer l'alpha global
EndIf
EndSelect
StopDrawing()
EndIf
If StartDrawing(CanvasOutput(#GADGET_Canvas))
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawAlphaImage(ImageID(#IMAGE_Draw),0,0)
StopDrawing()
EndIf
EndProcedure
CurrentColor = $000000
CurrentColor = RGBA(Red(CurrentColor),Green(CurrentColor),Blue(CurrentColor), 255)
CurrentMode = #GADGET_Brush
If CreateImage(#IMAGE_Color, 35, 35, 24) = 0 : End : EndIf
If CreateImage(#IMAGE_Draw, 380, 380, 32, #PB_Image_Transparent) = 0 : End : EndIf
If OpenWindow(0, 0, 0, 460, 400, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(#GADGET_Canvas, 10, 10, 380, 380)
ButtonImageGadget(#GADGET_Color, 400, 10, 50, 50, ImageID(#IMAGE_Color))
ButtonGadget(#GADGET_Brush, 400, 100, 50, 25, "Brush", #PB_Button_Toggle)
ButtonGadget(#GADGET_Fill, 400, 130, 50, 25, "Fill", #PB_Button_Toggle)
ButtonGadget(#GADGET_Clear, 400, 180, 50, 25, "Clear")
SetGadgetState(#GADGET_Brush, 1)
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #GADGET_Canvas
X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
Type = EventType()
Select EventType()
Case #PB_EventType_LeftButtonDown
DrawAction(X, Y, EventType())
Case #PB_EventType_LeftButtonUp
DrawAction(X, Y, EventType())
Case #PB_EventType_MouseMove
If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
DrawAction(X, Y, EventType())
EndIf
EndSelect
Case #GADGET_Color
CurrentColor = ColorRequester(CurrentColor)
CurrentColor = RGBA(Red(CurrentColor),Green(CurrentColor),Blue(CurrentColor), 255)
If StartDrawing(ImageOutput(#IMAGE_Color))
Box(0, 0, 35, 35, CurrentColor)
StopDrawing()
SetGadgetAttribute(#GADGET_Color, #PB_Button_Image, ImageID(#IMAGE_Color))
EndIf
Case #GADGET_Brush, #GADGET_Fill
EventGadget = EventGadget()
For Gadget = #GADGET_Brush To #GADGET_Fill
If Gadget = EventGadget
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next Gadget
CurrentMode = EventGadget
Case #GADGET_Clear
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, 380,380, RGB(255,255,255))
StopDrawing()
EndIf
If StartDrawing(ImageOutput(#IMAGE_Draw))
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(0, 0, 380,380, RGBA(0,0,0,255))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, 380,380, RGBA(0,0,0,0))
StopDrawing()
EndIf
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
