CustomFilterCallback()

Syntaxe

CustomFilterCallback(@CallbackFiltre())
Description
Spécifie une procédure qui sera appelée pour chaque pixel affiché par une opération de dessin en mode #PB_2DDrawing_CustomFilter.

Arguments

@CallbackFiltre() L'adresse de la procédure de callback.

La procédure doit avoir la forme suivante:
  Procedure CustomCallback(X, Y, CouleurSource, CouleurCible)
    ;
    ; Calcule la nouvelle Couleur à partir des entrées
    ; et la renvoie avec ProcedureReturn
    ;
    ProcedureReturn Couleur
  EndProcedure
La procédure sera appelée pour chaque pixel affiché par les commandes telles que Line(), Box() ou DrawText().

'CouleurSource' représente la couleur donnée à l'opération de dessin, et 'CouleurCible' représente la couleur du pixel cible aux coordonnées X, Y de la surface de dessin.
Ces deux couleurs sont toujours en 32 bits (avec canal alpha) indépendamment de la résolution de la surface de dessin.

Les coordonnées X et Y sont toujours orientées par rapport au coin supérieur gauche de la surface de dessin.
Les coordonnées ne sont pas affectées par les appels à SetOrigin() ou à ClipOutput().

Valeur de retour

Aucune.

Remarques

Cette procédure sera appelée de nombreuses fois (pour chaque pixel à appeler), donc elle devra être la plus courte et la plus optimisée possible, sinon l'impact sur les performances de dessin sera conséquent.

Note: le mode de dessin pour #PB_2DDrawing_CustomFilter fonctionne uniquement avec ImageOutput() et CanvasOutput().

Exemple

  Procedure CallbackFiltre(X, Y, CouleurSource, CouleurCible)
    ; Ne modifie que la composante rouge de la Source
    ProcedureReturn RGBA(Red(CouleurSource), Green(CouleurCible), Blue(CouleurCible), Alpha(CouleurCible))
  EndProcedure
  
  UseJPEGImageDecoder()

  If OpenWindow(0, 0, 0, 400, 200, "CustomFilterCallback", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    LoadImage(1, #PB_Compiler_Home + "Examples/3D/Data/Textures/clouds.jpg")
  
    If CreateImage(0, 400, 200) And StartDrawing(ImageOutput(0))
      DrawImage(ImageID(1), 0, 0, 400, 200)
      
      DrawingMode(#PB_2DDrawing_CustomFilter)      
      CustomFilterCallback(@CallbackFiltre())
      Circle(100, 100, 100, $0000FF)   
      Circle(300, 100, 100, $000000)
      
      StopDrawing() 
      ImageGadget(0, 0, 0, 400, 200, ImageID(0))
    EndIf
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf

Voir aussi

DrawingMode(), CustomGradient()

OS Supportés

Tous

<- ConicalGradient() - 2DDrawing Index - CustomGradient() ->