J'ai un bug que je ne comprends pas (pourtant, j'ai cherché, mais je dois être endormi ^^).
Je dessine sur un canvas et en même temps sur mon image (mon calque), puis, j'update mon canvas en dessinant le layer dessus, et paf rien ne s'affiche.
J'ai tenté d'afficher ce layer sur un imagegadget() et pareil, rien ne s'affiche.
Pourtant lorsque je sauve mon layer, l'image est bien remplie de points...
Si vous avez une idée du pourquoi que ça bug ce bidule

Code :
Code : Tout sélectionner
;{ infos
; Modified by blendman : 05/2015
; PB 5.22LTS (marche sur 5.30 )
;}
;{ enumeration
Enumeration ; gadgets
#Imagegadget
#canvas
; tools
#G_PanelTool
#G_Preview
; layer
#G_PanelLayer
#G_LayerList
EndEnumeration
Enumeration ; menu
; file
#Menu_Export
#menu_Exit
; edition
#menu_Clear
EndEnumeration
Enumeration ; image
#ImageExport
#ImagePreview
EndEnumeration
;}
;{ structures
Structure sLayer
Image.i
EndStructure
Global Dim Layer.sLayer(0)
;}
;{ Variables
Global x, y, LayerId.i
;}
;{ procedure
Procedure UpdateCanvas()
If StartDrawing(CanvasOutput(#canvas))
Box(0,0,1500,1500,RGBA(220,220,220,255))
DrawingMode(#PB_2DDrawing_AlphaBlend)
;For i=1 To ArraySize(layer())
; DrawAlphaImage(layer(i)\Image,0,0,255)
;Next i
DrawAlphaImage(layer(LayerId)\Image,0,0,255) ; <---------------- bug :(
StopDrawing()
EndIf
EndProcedure
; Layers
Procedure LayerUpdateList()
n = ArraySize(layer())
AddGadgetItem(#G_LayerList,-1,"Layer"+Str(n))
EndProcedure
Procedure LayerAdd()
n = ArraySize(layer())
ReDim layer(n+1)
W = GadgetWidth(#canvas)
H = GadgetHeight(#canvas)
With layer(n+1)
\Image = CreateImage(#PB_Any,w,h,32,#PB_Image_Transparent)
LayerId = n+1
EndWith
LayerUpdateList()
EndProcedure
;}
If UsePNGImageDecoder() And UsePNGImageEncoder()
EndIf
ExamineDesktops()
winw = DesktopWidth(0)
winh = DesktopHeight(0)
OpenWindow(0,0,0,winw,winh,"Painting Tablet",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_Maximize)
If CreateMenu(0,WindowID(0))
MenuTitle("File")
MenuItem(#Menu_Export,"Export layer Image"+Chr(9)+"Ctrl+E")
MenuBar()
MenuItem(#Menu_Exit,"Exit"+Chr(9)+"Escape")
MenuTitle("Edit")
MenuItem(#Menu_clear,"Clear"+Chr(9)+"Ctrl+W")
AddKeyboardShortcut(0,#PB_Shortcut_E|#PB_Shortcut_Control,#Menu_Export)
AddKeyboardShortcut(0,#PB_Shortcut_W|#PB_Shortcut_Control,#menu_Clear)
AddKeyboardShortcut(0,#PB_Shortcut_Escape,#menu_Exit)
EndIf
;{ gadgets & images
w = WindowWidth(0)-150
h = WindowHeight(0)-25
canvasW = w-300
canvasH = h-25-80
canvasX = 200
;{ images
CreateImage(#ImageExport,CanvasW,CanvasH,32, #PB_Image_Transparent)
CreateImage(#ImagePreview,150,100,32, #PB_Image_Transparent)
;}
; panel tool
If PanelGadget(#G_PanelTool, 5,0,170,h-25)
AddGadgetItem(#G_PanelTool,0,"Tools")
ImageGadget(#G_Preview,5,30,140,100,ImageID(#ImagePreview),#PB_Image_Border)
CloseGadgetList()
EndIf
CanvasGadget(#canvas,canvasX,25,canvasW,CanvasH)
SetGadgetAttribute(#canvas,#PB_Canvas_Cursor,#PB_Cursor_Cross)
; panel layer
If PanelGadget(#G_PanelLayer, canvasX+w-280,0,200,h-25)
AddGadgetItem(#G_PanelLayer,0,"Layers")
ListViewGadget(#G_LayerList, 10,50,180,200)
CloseGadgetList()
EndIf
;}
LayerAdd()
Repeat
Select WaitWindowEvent(20)
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Menu
Select EventMenu()
Case #Menu_clear
If StartDrawing(ImageOutput(layer(LayerId)\image))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0,0,canvasW,canvasH,RGBA(0,0,0,0))
StopDrawing()
EndIf
UpdateCanvas()
Case #Menu_Export
filename$ = SaveFileRequester("Save Image","","png|*.png",0)
If filename$ <>""
If GetExtensionPart(filename$) <> "png"
filename$ + ".png"
EndIf
SaveImage(Layer(LayerId)\image, filename$,#PB_ImagePlugin_PNG)
EndIf
Case #Menu_Exit
Break
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
;{ layers
Case #G_LayerList
LayerId = GetGadgetState(#G_LayerList)+1
Debug layerId
Debug Layer(LayerId)\Image
Updatecanvas()
;}
;{ canvas
Case #canvas
EventType = EventType()
If EventType = #PB_EventType_LeftButtonDown
MouseDown = #True
ElseIf EventType = #PB_EventType_LeftButtonUp
MouseDown = #False
Updatecanvas()
If StartDrawing(ImageOutput(#ImagePreview))
Debug "update preview"
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(0,0,200,200,RGBA(255,255,255,255)) ; ok
;Debug layerID
;Debug layer(LayerId)\image
DrawAlphaImage(Layer(LayerId)\image,0,0,255) ; <-------------- ne marche pas ???
StopDrawing()
EndIf
SetGadgetState(#G_Preview,ImageID(#imagePreview))
; SetGadgetState(#G_Preview,ImageID(layer(LayerId)\Image)) ; ok
ElseIf EventType = #PB_EventType_MouseMove
If MouseDown
xx = GetGadgetAttribute(#canvas,#PB_Canvas_MouseX)
yy = GetGadgetAttribute(#canvas,#PB_Canvas_MouseY)
If StartDrawing(CanvasOutput(#canvas)) ; dessin sur le canvas
DrawingMode(#PB_2DDrawing_AlphaBlend)
Circle(xx, yy,10,RGBA(0,0,0,255))
StopDrawing()
EndIf
If StartDrawing(ImageOutput(layer(LayerId)\image)) ; on dessin sur le layer
DrawingMode(#PB_2DDrawing_AlphaBlend)
Circle(xx, yy, 10,RGBA(0,0,0,255))
StopDrawing()
EndIf
;UpdateCanvas()
EndIf
EndIf
;}
EndSelect
EndSelect
ForEver