FreeBASIC マニュアルのトップに戻る

FreeBASIC AlphaGfx

目次→描画ライブラリ参考→2次元 描画関数ALPHA←オリジナル・サイト

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 は、画像を 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 - 1650 - 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

image

この例は、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, 08)
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

image

QBからの違い:

参照:
2次元描画関数に戻る

←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2021-10-10 20:07:44
日本語翻訳:WATANABE Makoto、原文著作者:AntoniGual

ホームページのトップに戻る

表示-非営利-継承