I've tried searching around and experimenting with having 5 image layers that I want to be drawn with anything black being transparent.
Would anyone be able to show me how to do it or what I am doing wrong with the example below?
Code: Select all
Structure drawLayers
IMG.l ; image number
VIS.l ; visible flag
EndStructure
Global Dim l.drawLayers(4) ; layers array
Global Dim bp(15) ; palette
If OpenWindow(0,0,0,640, 512, "Image Layers Demo",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; define palette
Restore paletteData
For i=1 To 15
Read.a r
Read.a g
Read.a b
bp(i)=RGBA(r,g,b,255)
Next
bp(0) = RGBA(0,0,0,0)
; create drawing layers
For i=0 To ArraySize(l())-1
l(i)\IMG=CreateImage(#PB_Any,640,512,32,bp(0))
If StartDrawing(ImageOutput(l(i)\IMG))
Box(i*80,0,60,100,bp(i))
StopDrawing()
EndIf
Next
l(0)\VIS=1
; init screen gadget
CanvasGadget(0,0,0,640,512)
SetGadgetAttribute(0, #PB_Canvas_Cursor , #PB_Cursor_Cross)
If StartDrawing(CanvasOutput(0))
Box(0,0,640,512,bp(0)) ; clear canvas to black
StopDrawing()
EndIf
;
;-------- MainLoop --------
;
Repeat
Event = WaitWindowEvent()
If Event
If StartDrawing(CanvasOutput(0))
;BackColor(#Black)
;DrawingMode(#PB_2DDrawing_AlphaBlend)
For i=0 To ArraySize(l())-1
;If l(i)\VIS
DrawAlphaImage(ImageID(l(i)\IMG),0,0)
;EndIf
Next
;DrawingMode(#PB_2DDrawing_Default)
StopDrawing()
EndIf
Else
Delay(1)
EndIf
Until Event = #PB_Event_CloseWindow
Else
MessageRequester(" Error","Cannot load graphics!")
EndIf
End
;-------- Data Section --------
DataSection
; palette Data
paletteData:
Data.a 255,000,000,000,255,000,255,255,000,000,000,255,255,000,255
Data.a 000,255,255,255,255,255,128,128,128,192,000,000,000,192,000
Data.a 192,192,000,000,000,192,192,000,192,000,192,192,192,192,192
EndDataSection