Masque alpha sur une image 32bits

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Masque alpha sur une image 32bits

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]