CustomFilterCallback()

Syntax

CustomFilterCallback(@FilterCallback())
Beschreibung
Bestimmt einen Callback, welcher für jeden Pixel aufgerufen wird, der Teil einer Zeichenoperation im #PB_2DDrawing_CustomFilter Zeichenmodus ist.

Parameter

Der Callback muss die folgende Form haben:
  Procedure CustomCallback(x, y, QuellFarbe, ZielFarbe)
    ;
    ; Berechne die ErgebnisFarbe anhand der gemachten Eingaben
    ;
    ProcedureReturn ErgebnisFarbe
  EndProcedure
Der Callback wird für jeden Pixel aufgerufen, der als Ergebnis eines Aufrufs von Zeichenfunktionen wie Line(), Box() oder DrawText() gezeichnet wird. Der Parameter 'QuellFarbe' definiert die in der Zeichenoperation angegebene Farbe und der Parameter 'ZielFarbe' definiert die Farbe des Zielpixels im Zeichenbereich. Beide Farben sind immer 32 Bit mit Alpha-Kanal - unabhängig von der Farbtiefe der Ausgabe. Der Callback hat die Farbe zu berechnen und zurückzugeben, die der Zielpixel nach dem Zeichnen haben soll.

Dieser Callback wird sehr oft aufgerufen (für jeden zu zeichnenden Pixel), weshalb er sehr klein und schnell sein sollte, um nicht zu große Auswirkungen auf die Zeichen-Performanz zu haben.

Hinweis: Der #PB_2DDrawing_CustomFilter Zeichenmodus arbeitet nur mit ImageOutput().

Beispiel:

  Procedure FilterCallback(x, y, QuellFarbe, ZielFarbe)
    ; Nehme nur die rote Komponente aus der Quelle, ändere nicht die anderen
    ProcedureReturn RGBA(Red(QuellFarbe), Green(ZielFarbe), Blue(ZielFarbe), Alpha(ZielFarbe))
  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

Unterstützte OS

Alle

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