PureBasic

CustomFilterCallback()

Синтаксис

CustomFilterCallback(@FilterCallback())

Описание


Задаёт процедуру обратного вызова, которая будет вызываться для каждого пикселя, затронутого операцией отрисовки в режиме отрисовки #PB_2DDrawing_CustomFilter.

Параметры

@FilterCallback() Адрес процедуры обратного вызова. Она должна быть объявлена следующим образом:

Procedure CustomCallback(x, y, SourceColor, TargetColor)
    ;
    ;Вычислим цвет ResultColor по данным входным параметрам
    ;
    ProcedureReturn ResultColor
EndProcedure

Процедура обратного вызова будет вызвана для каждого пикселя, рисуемого в результате обращения к функциям вроде Line(), Box() или DrawText(). Параметр SourceColor содержит цвет, заданный для операции рисования, а параметр TargetColor содержит цвет данного пикселя из области рисования. Оба цвета всегда 32-битные с каналом alpha (прозрачности), независимо от глубины цвета поверхности вывода. Процедура обратного вызова должна вычислить цвет, который данный пиксель получит после отрисовки, и возвратить его.

Координаты x и y, полученные в обратном вызове, всегда относятся к левому верхнему углу поверхности вывода графики. Координаты не изменяются с вызовами функций SetOrigin() или ClipOutput().

Возвращаемое значение

Ничего.

Комментарии

Эта процедура будет вызвана много раз (для каждого рисуемого пикселя), поэтому она должна быть очень мала и быстра, чтобы не слишком сильно повлиять на скорость рисования.

Примечание: Режим рисования #PB_2DDrawing_CustomFilter работает только с поверхностями вывода графики - ImageOutput() и CanvasOutput().

Пример

Procedure FilterCallback(x, y, SourceColor, TargetColor)
    ; Брать только Красный компонент из Источника, не изменять другие
    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/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


См. также

DrawingMode(), CustomGradient()

Поддерживаемые OS

Все

<- ConicalGradient() - Оглавление 2D Drawing - CustomGradient()->

������