Параметр для графического оператора
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
См. также