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

FreeBASIC Paint

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

PAINT 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

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

指定した色の境界で区切られた領域を、塗りつぶします。

構文:
Paint [target,] [STEP] (x, y) [, [paint][, [border_color]]]

パラメタ:
target
描画するバッファを指定します。
STEP
座標が相対的であることを示します。
(x, y)
色で塗りつぶし始める、画素の座標。
paint
色属性、もしくは、塗りつぶしパターン
数値は色を示して、文字列は塗りつぶしパターンを示します。
border_color
塗りつぶしのための境界色

説明:
描画命令は、指定された色の境界によって区切られた領域を、塗りつぶします。
'flood-fill' とか 'paint bucket' と呼ばれることもあります。

 Paint は、現在、作業中のページで、Screenset 命令文のセットとして、または、指定されるなら、目標の、 Get (描画)/Put バッファ上で、作動できます。

 塗りつぶしは、指定された(x,y)座標から始めます。
 STEP を指定すると、これらは最後の描画カーソルの位置からの相対座標になります。
 また、座標は、 WINDOW 、あるいは、 View (描画) 命令文で設定される、カスタム座標システム・セットの影響を受けます。
 また、 View によって設定された切り取りが、適用されます。

 paint 引数が、数字の場合は、それは Color 命令文で使うものと同じ形式で色を表します。領域は、その色を使って、塗りつぶされます。
 paintString(文字列)の場合は、領域は、パターンを使って塗りつぶされます。
 パターンは、常に、8*8 画素です。そして、渡す文字列は、現在の色の濃さに、形式が依存している、画素データを保持していなければなりません。
 文字列は、各列でパターン画素を保持します。そして、そのサイズは、以下の通りです:

色深度が、1、2、4、および8 の場合:
size = 8 * 8 = 64
色深度、15と16の場合:
size = (8 * 8) * 2 = 128
色深度、24と32の場合:
size = (8 * 8) * 4 = 256

 渡す文字列が、より小さいなら、なくなった画素は 0 になります。
 paint 引数を省略すると、Colorで、現在の前景色カラーセットを使って、通常の塗りつぶしをします。
 指定された枠線色の画素を見つけるまで、塗りつぶしは続きます。
 border_color を省略すると、現在の背景色が使われます。

警告: 境界線が、透明色で描画され(GFX_ALPHA_PRIMITIVES オプション・フラグと組み合わせて)、その上に、いくつかの画素が上塗りされる場合、これらの上塗りされた画素の結果の(ブレンドされた)色は、塗りつぶし色が境界線の外に逃げるリーク・ポイントを引き起こす可能性があります 。
このため、透明色で境界線を描くことは推奨できません。

例:
注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

' 中を青で塗った、白丸を描きます。
Screen 13
Circle (160, 100), 30, 15
Paint (160, 100), 1, 15
Sleep

Paint
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

' 円を描いて、その中を、市松模様のパターンで満たします

'' 画面のビット深度を選択します。
'' この値を、他の値に設定変更してみましょう: 8、16または32

Const bit_depth = 8

'' 文字列で表された画素色を返すための関数
'' 現在のビット深度のために、適切な形式の文字列を、返します
Function paint_pixel( ByVal c As ULong, ByVal bit_depth_ As Integer ) As String

    If bit_depth_ <= 8 Then '' 8-bit:
        FunctionChr ( CUByte(c) )
       
    ElseIf bit_depth_ <= 16 Then '' 16-bit:
        Function = MKShort( c Shr 3 And &h1f Or _
                            c Shr 5 And &h7e0 Or _
                            c Shr 8 And &hf800 )

    ElseIf bit_depth_ <= 32 Then '' 32-bit:
        Function = MKL (c)
       
    End If

End Function


'' 選択されたビット深度の描画画面を開きます
ScreenRes 320, 200, bit_depth

'' 色を保持するための、変数宣言
Dim As ULong c, c1, c2, cb

'' 塗りつぶしで使うパターンを保持する、文字列変数を宣言
Dim As String paint_pattern = ""

'' 色を設定します
If bit_depth <= 8 Then
    c1 = 7  ''pattern color 1
    c2 = 8  ''pattern color 2
    cb = 15 ''border color
Else
    c1 = RGB(192, 192, 192) '' pattern color 1
    c2 = RGB(128, 128, 128) '' pattern color 2
    cb = RGB(255, 255, 255) '' border color
End If

'' 塗りつぶしで使うパターンを作ります
For y As UInteger = 0 To 7
    For x As UInteger = 0 To 7

        '' 画素(c)の色を選択します
        If (x \ 4 + y \ 4) Mod 2 > 0 Then
            c = c1
        Else
            c = c2
        End If

        '' 画素をパターンに追加します
        paint_pattern = paint_pattern + paint_pixel (c, bit_depth)
       
        '' 画面の左上の角に、パターン・タイルを描く場合は、
        '' 以下の行を使います。
        ' pset (x, y), c
       
    Next x
Next y

'' 境界線の色で、円を描きます
Circle (160, 100), 50, cb, , , 1.0

'' paint_pattern で円の領域を塗りつぶして、境界線色で止めます
Paint (160, 100), paint_pattern, cb

'' プログラムを終わらせるまで、止めておきます
Sleep


QB との違い:

参考:


 描画予約語一覧

2次元 描画関数に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2023-07-09 00:21:22
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

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

表示-非営利-継承