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 EndProcedureLa 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