Custom
 
Параметр для графического оператора Put который выбирает свой (кустарный) метод

Синтаксис

Put [ target, ] [ STEP ] ( x,y ), source [ ,( x1,y1 )-( x2,y2 ) ], Custom, custom_function_ptr [, parameter]

Параметры

Custom
Требуется.
custom_function_ptr
Имя своей пользовательской функции.
parameter
Необязательный Указатель для передачи в пользовательскую функцию; Если не указано, значением по умолчанию является ноль (0).

Описание

Custom выбирает пользовательскую определяемую пользователем функцию в качестве метода для блитинга буфера изображения.

Метод Custom использует пользовательскую функцию для расчета окончательных значений пикселей, который можно определить в буфер назначения. Эта функция будет вызываться один раз для каждого пикселя исходного изображения, и получит значения начального и конечного пикселя, и указатель на данные, переданный в функцию Put. Значение возвращаемого пикселя будет значением используемым для рисования в буфер назначения. Функция имеет вид:

Declare Function identifier ( _
ByVal source_pixel As UInteger, _
ByVal destination_pixel As UInteger, _
ByVal parameter As Any Ptr _
) As UInteger


identifier - это имя функции.
source_pixel - это текущее значение пикселя исходного изображения.
destination_pixel - это текущее значение пикселя конечного изображения.
parameter - это параметр, который передается в функию Put. Если он был опущен, его значение будет равно нулю.

Пример

Function dither ( ByVal source_pixel As UInteger, ByVal destination_pixel As UInteger, ByVal parameter As Any Ptr ) As UInteger
    
    '' будет возвращать либо исходный пиксель , либо конечный, в зависимости от результатов rnd
    
    Dim threshold As Single = 0.5
    If parameter <> 0 Then threshold = *CPtr(Single Ptr, parameter)
    
    If Rnd() < threshold Then
        Return source_pixel
    Else
        Return destination_pixel
    End If
    
End Function


Dim img As Any Ptr, threshold As Single

'' Настройка экрана
ScreenRes 320, 200, 16, 2
ScreenSet 0, 1

'' Создание изображения
img = ImageCreate(32, 32)
Line img, ( 0,  0)-(15,  15), RGB(255,   0,   0), bf
Line img, (16,  0)-(31,  15), RGB(  0,   0, 255), bf
Line img, ( 0, 16)-(15,  31), RGB(  0, 255,   0), bf
Line img, (16, 16)-(31,  31), RGB(255,   0, 255), bf

'' сглаживание изображения с различным thresholds
Do Until Len(Inkey)
    
    Cls
    
    threshold = 0.2
    Put ( 80 - 16, 100 - 16), img, Custom, @dither, @threshold
    
    '' по умолчанию threshold = 0.5
    Put (160 - 16, 100 - 16), img, Custom, @dither
    
    threshold = 0.8
    Put (240 - 16, 100 - 16), img, Custom, @dither, @threshold
    
    ScreenCopy
    Sleep 25
    
Loop

'' освободить память изображения
ImageDestroy img



Различия диалектов

  • Не доступно в диалекте -lang qb.

Отличия от QB

  • Новое в FreeBASIC

См. также