Alpha
 
Параметр для графического оператора Put, которые выбирает альфа-смешивание в качестве метода

Синтаксис

Put [ target, ] [ STEP ] ( x,y ), source [ ,( x1,y1 )-( x2,y2 ) ], Alpha
Put [ target, ] [ STEP ] ( x,y ), source [ ,( x1,y1 )-( x2,y2 ) ], Alpha, alphaval

Параметры

Alpha
Требуется.
alphaval
Дополнительный параметр альфа в диапазоне [0..255]. Заменяет значения альфа в отдельных пикселях.

Описание

Alpha  - альфа-смешивание выбирается в качестве метода Put для рисования изображения. Если параметр alphaval указан, переопределяется альфа-значение каждого пикселя, и цвет маски (пурпурный), будет рассматриваться как прозрачный. Это работает в 15, 16, 24, или 32-битовой глубине цвета.

Если alphaval не указан, Alpha будет работать только в 32-битной глубине цвета, и Put будет использовать значение альфа встроенный в каждом пикселе. Пиксели с использованием цвета маски будут рассматриваться как нормальные, и обращается с их заданным значением альфа.

Alpha также имеет еще один режим, который позволяет 8-битное изображение Put(поместить) поверх 32-битного изображения. В этом случае, заменяется альфа-канал из 32-разрядного изображения содержимым 8-битного изображения.

Альфа-значения в диапазоне от 0 до 255. Альфа-значение 0 не рисует изображение совсем. Все другие альфа-значения увеличиваются на 1, чтобы получить значение в диапазоне от 2 до 256, а затем результат делится на 256, чтобы получить значение между 1/128 и 1, который используется для того, чтобы вычислить точное значение каждого пикселя из начального и конечного пикселя. Таким образом , 255 практически эквивалентно рисунку, нарисованному с помощью Put с методом блитирования Trans, 0 эквивалентно тому, как будто рисунок вообще не рисуется, а от всех других значений ожидается альфа-смешивание.

Пример

В этом примере сравниваются два различных режима Alpha, том числе, как они реагируют на цвет маски
'' Устанавливаем 32-битный экран
ScreenRes 320, 200, 32

'' Нарисуем клетчатый фон
For y As Integer = 0 To 199
    For x As Integer = 0 To 319
        PSet (x, y), IIf((x Shr 2 Xor y Shr 2) And 1, RGB(160, 160, 160), RGB(128, 128, 128))
    Next x
Next y

'' Сделаем изображение спрайта для вывода
Dim img As Any Ptr = ImageCreate(32, 32, RGBA(0, 0, 0, 0))
For y As Single = -15.5 To 15.5
    For x As Single = -15.5 To 15.5
        Dim As Integer r, g, b, a
        If y <= 0 Then
            If x <= 0 Then
                r = 255: g = 0: b = 0   '' красный
            Else
                r = 0: g = 0: b = 255   '' синий
            End If
        Else
            If x <= 0 Then
                r = 0: g = 255: b = 0   '' зеленый
            Else
                r = 255: g = 0: b = 255 '' пурпурный (прозрачный цвет маски)
            End If
        End If
        a = 255 - (x ^ 2 + y ^ 2)
        If a < 0 Then a = 0': r = 255: g = 0: b = 255
        PSet img, (15.5 + x, 15.5 - y), RGBA(r, g, b, a)
    Next x
Next y

'' Нарисуем с одним значением Альфа, Trans для сравнения
Draw String (32, 10), "Single alpha"
Put (80 - 16,  50 - 16), img, Alpha, 64
Put (80 - 16, 100 - 16), img, Alpha, 192
Put (80 - 16, 150 - 16), img, Trans

'' Нарисуем с полным альфа-каналом
Draw String (200, 10), "Full alpha"
Put (240 - 16, 100 - 16), img, Alpha

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

'' Ожидаем нажатия клавиши
Sleep



Этот пример показывает специальный метод для установки 32-битного альфа-канала, с помощью 8-битного изображения
Dim As Any Ptr img8, img32
Dim As Integer x, y, i

'' Установим 8-битный графический экран
ScreenRes 320, 200, 8
For i = 0 To 255
    Palette i,  i, i, i
Next i
Color 255, 0

'' Создаем 8-битное изображение
img8 = ImageCreate(64, 64, 0,  8)
For y = 0 To 63
    For x = 0 To 63
        Dim As Single x2 = x - 31.5, y2 = y - 31.5
        Dim As Single t = Sqr(x2 ^ 2 + y2 ^ 2) / 5
        PSet img8, (x, y), Sin(t) ^ 2 * 255
    Next x
Next y

Draw String (16, 4), "8-bit Alpha sprite"
Put (16, 16), img8
Sleep


'' Установим 32-битный графический экран
ScreenRes 320, 200, 32
For y = 0 To 199
    For x = 0 To 319
        PSet (x, y), IIf(x - y And 3, RGB(160, 160, 160), RGB(128, 128, 128))
    Next x
Next y

'' Создаем 32-битный, полностью непрозрачный спрайт
img32 = ImageCreate(64, 64, 0, 32)
For y = 0 To 63
    For x = 0 To 63
        PSet img32, (x, y), RGB(x * 4, y * 4, 128)
    Next x
Next y

Draw String (16, 4), "Original Alpha channel"
Put (16, 16), img32, Alpha

'' Установим новый альфа-канал с использованием 8-битного изображения
Put img32, (0, 0), img8, Alpha

Draw String (16, 104), "New Alpha channel"
Put (16, 116), img32, Alpha

''Освободим память для двух изображений
ImageDestroy img8
ImageDestroy img32

Sleep



Отличия от QB

  • Новое в FreeBASIC

См. также