メソッドとして、アルファ混合を選定する
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 は、画像を
Putting するメソッドとして、アルファ混合を選択します。
alphaval パラメタを指定すると、それぞれの画素のアルファ値をくつがえします。そして、マスク色(マゼンタ)は、透明色として扱われます。
これは、15、16、24、または32ビットの色の濃さで、働きます。
alphaval が指定されないと、
Alpha は、32ビットの色の濃さだけで働きます。そして、
Put は、各画素の中に埋め込まれたアルファ値を使用します。
マスク色を使用する画素は、標準として扱われて、それらの与えられたアルファ値で描かれます。
Alphaは、また、32ビットの画像の上に、8ビットの画像を
Put することを許容する、別のモードを持っています。
この場合、32ビットの画像のアルファ・チャンネルは、8ビットの画像の内容に、置き換えられます。
アルファ値は、0から255の間の範囲です。
0 のアルファ値は、画像を全く描きません。
他のすべてのアルファ値は、2〜256の範囲の値を得るために、1つ増加されます。そして、その結果は、256で割り算されて、1/128〜1の値が得られます。これらは、ソースの画素と、あて先の画素から、それぞれの画素の正確な値を計算するのに、使われます。
したがって、255は、Trans 点描モードで、Put を使って描くことと、実際に同等です。そして、0 は、全く何もしないのに同等です。そして、他のすべてのアルファ値混合は、期待できます。
例:
この例は、2つの異なった Alpha モードを比較し、これがマスク色にどう反応するかを、示します。
注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
'' 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
'' Puttingのために、画像スプライト(sprite)を作ります
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 '' red
Else
r =
0: g =
0: b =
255 '' blue
End If
Else
If x <=
0 Then
r =
0: g =
255: b =
0 '' green
Else
r =
255: g =
0: b =
255 '' magenta (透明なマスク色)
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
この例は、8ビットの画像を使って、32ビットのアルファ・チャンネルを設定する、特別な方法を示しています。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
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
''2つの画像のためのメモリを、解放します
ImageDestroy img8
ImageDestroy img32
Sleep
QBからの違い:
参照: