PureBasic

CustomGradient()

Синтаксис

CustomGradient(@GradientCallback())

Описание


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

Параметры

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

Procedure.f GradientCallback(x, y)
    ;
    ; Возвратим значение между 0.0 и 1.0 чтобы задать градиент в позиции x, y.
    ;
    ProcedureReturn 1.0
EndProcedure

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

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

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

Ничего.

Комментарии

По умолчанию значение 0.0 соответствует текущему цвету фона, а значение 1.0 соответствует текущему цвету рисования. Добавить цвета в градиент можно командой GradientColor().

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

Примечание: Эта команда имеет эффект только с ImageOutput() и CanvasOutput(). Градиент рисуется, только если активируется режим #PB_2DDrawing_Gradient команды DrawingMode().

Пример

Procedure.f GradientCallback(x, y)
    ProcedureReturn Sin(x * 0.1) * Sin(y * 0.1) ; Будет между 0 и 1
EndProcedure

If OpenWindow(0, 0, 0, 400, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateImage(0, 400, 200) And StartDrawing(ImageOutput(0))
        Box(0, 0, 400, 200, $FFFFFF)

        DrawingMode(#PB_2DDrawing_Gradient)
        BackColor($00FFFF)
        FrontColor($FF0000)

        CustomGradient(@GradientCallback())
        Circle(100, 100, 100)
        Circle(300, 100, 100)

        StopDrawing()
        ImageGadget(0, 0, 0, 400, 200, ImageID(0))
    EndIf

    Repeat
        Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
EndIf


См. также

GradientColor(), ResetGradientColors(), LinearGradient(), CircularGradient(), EllipticalGradient(), BoxedGradient(), ConicalGradient(), DrawingMode()

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

Все

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