Page 1 sur 1

Masque alpha sur une image 32bits

Publié : mar. 20/avr./2010 20:08
par Le Soldat Inconnu
Ce code permet d'appliquer un masque Alpha sur une image 32 bits.

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