En gros, j'applique le masque uniquement sur la couche alpha de l'image pour en modifier la transparence.
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.40
;
; Explication du programme :
; Appliquer un masque alpha sur une image 32 bits
Procedure Filtre_MelangeAlpha(x, y, CouleurSource, CouleurDestination)
ProcedureReturn (CouleurSource & $00FFFFFF) | (Alpha(CouleurSource)*Alpha(CouleurDestination)/255)<<24
EndProcedure
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
CreateImage(0, 100, 100, 32) ; Crétion du masque
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, 100, 100, 0)
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(25, 25, 50, 50, $FF000000)
Box(75, 0, 25, 100, $80000000)
StopDrawing()
CreateImage(1, 100, 100, 32) ; Image
StartDrawing(ImageOutput(1))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, 100, 100, 0)
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(0, 0, 100, 50, $80FF00FF)
Box(0, 50, 100, 50, $80FFFF00)
StopDrawing()
CreateImage(2, 100, 100, 32) ; Image avec le masque
StartDrawing(ImageOutput(2))
DrawingMode(#PB_2DDrawing_AlphaChannel)
DrawAlphaImage(ImageID(0), 0, 0)
DrawingMode(#PB_2DDrawing_CustomFilter)
CustomFilterCallback(@Filtre_MelangeAlpha())
DrawAlphaImage(ImageID(1), 0, 0)
StopDrawing()
ImageGadget(0, 0, 0, 100, 100, ImageID(2))
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow