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
Все