CustomFilterCallback()

Syntaxe

CustomFilterCallback(@FilterCallback())
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

La procédure doit avoir la forme suivante:
  Procedure CustomCallback(x, y, CouleurSource, CouleurDestination)
    ;
    ; Calcul de  'Couleur' à partir des entrées
    ;
    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 'CouleurDestination' représente la couleur du pixel 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. La procédure calculera la nouvelle couleur du pixel à afficher et la renverra.

Cette procédure sera appelée de nombreuse 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 #PB_2DDrawing_CustomFilter fonctionne uniquement avec ImageOutput().

Exemple

  Procedure FilterCallback(x, y, SourceColor, TargetColor)
    ; Take only the Red component from the Source, do not modify the others
    ProcedureReturn RGBA(Red(SourceColor), Green(TargetColor), Blue(TargetColor), Alpha(TargetColor))
  EndProcedure
  
  UseJPEGImageDecoder()

  If OpenWindow(0, 0, 0, 400, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    LoadImage(1, #PB_Compiler_Home + "examples/sources/data/clouds.jpg")
  
    If CreateImage(0, 400, 200) And StartDrawing(ImageOutput(0))
      DrawImage(ImageID(1), 0, 0, 400, 200)
      
      DrawingMode(#PB_2DDrawing_CustomFilter)      
      CustomFilterCallback(@FilterCallback())
      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

OS Supportés

Tous

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