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参数。覆盖单个像素中的Alpha值。

说明

Alpha选择半透明混合作为Put拍摄图像的方法。如果指定了alphaval 参数,它将覆盖每个像素的alpha值,掩码颜色(洋红色)将被视为透明的。这可以在15,16,24或32位颜色深度工作。

如果未指定alphaval Alpha将仅在32位颜色深度工作,而Put将使用嵌入每个像素中的Alpha值。使用蒙版颜色的像素将被视为正常,并以其给定的alpha值绘制。

Alpha还有一种模式允许8位图像在32位图像之上是Put.在这种情况下,它将用8位图像的内容替换32位图像的alpha通道。

Alpha值的范围介于0到255之间。Alpha值为0将不会绘制图像。所有其他alpha值都增加1,得到2到256之间的范围,然后将结果除以256,以获得1/128和1之间的值,用于计算源中每个像素的精确值和目标像素。因此,255实际上等效于使用Put with Trans blitting模式的绘图,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

''用单一Alpha值,Trans进行比较
Draw String (32, 10), "单个alpha"
Put (80 - 16,  50 - 16), img, Alpha, 64
Put (80 - 16, 100 - 16), img, Alpha, 192
Put (80 - 16, 150 - 16), img, Trans

''配有完整的Alpha通道
Draw String (200, 10), "全半透明"
Put (240 - 16, 100 - 16), img, Alpha

''释放图像内存
ImageDestroy img

''等待按键
Sleep



此示例显示了使用8位图像设置32位Alpha通道的特殊方法
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位Alpha精灵"
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), "原始Alpha通道"
Put (16, 16), img32, Alpha

''使用8位图像放置一个新的Alpha通道
Put img32, (0, 0), img8, Alpha

Draw String (16, 104), "新Alpha频道"
Put (16, 116), img32, Alpha

''释放两个图像的内存
ImageDestroy img8
ImageDestroy img32

Sleep



与QB差别

  • 新的FreeBASIC

参考