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

@FilterCallback() Die Adresse einer Callback-Funktion, welche aufgerufen werden soll. Sie 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, die der Zielpixel nach dem Zeichnen haben soll, und diese zurückzugeben.

Die im Callback empfangenen x und y Koordinaten sind immer relativ zu oberen linken Ecke der Zeichenausgabe. Die Koordinaten werden durch Aufrufe von SetOrigin() oder ClipOutput() nicht beeinflusst.

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Anmerkungen

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() und CanvasOutput().

Beispiel

  Procedure FilterCallback(x, y, QuellFarbe, ZielFarbe)
    ; Nehme nur die Rot-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 Beispiel", #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(@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

Siehe auch

DrawingMode(), CustomGradient()

Unterstützte OS

Alle

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