指定した色の境界で区切られた領域を、塗りつぶします。
構文:
Paint [target,] [STEP] (x, y)
[, [paint][, [border_color]]]
パラメタ:
target
描画するバッファを指定します。
STEP
座標が相対的であることを示します。
(x, y)
色で塗りつぶし始める、画素の座標。
paint
色属性、もしくは、塗りつぶしパターン
数値は色を示して、文字列は塗りつぶしパターンを示します。
border_color
塗りつぶしのための境界色
説明:
描画命令は、指定された色の境界によって区切られた領域を、塗りつぶします。
'flood-fill' とか 'paint bucket' と呼ばれることもあります。
塗りつぶしは、指定された
(x,y)座標から始めます。
STEP を指定すると、これらは最後の描画カーソルの位置からの相対座標になります。
また、座標は、
WINDOW 、あるいは、
View (描画) 命令文で設定される、カスタム座標システム・セットの影響を受けます。
また、
View によって設定された切り取りが、適用されます。
paint 引数が、数字の場合は、それは
Color 命令文で使うものと同じ形式で色を表します。領域は、その色を使って、塗りつぶされます。
paint が
String(文字列)の場合は、領域は、パターンを使って塗りつぶされます。
パターンは、常に、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
' 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:
Function =
Chr
( 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 との違い:
- target は、FreeBASIC で追加されました。
-
QBでは、塗りつぶしパターンは、常に 8 ビット幅でした。そして、高さは文字列の長さ(最大64)でした。
FreeBASIC では、塗りつぶしパターンは、色の濃さの如何にかかわらず8 画素幅です。そして、高さはいつも 8 です。
-
QB で使えた背景色パラメタは、 FreeBASIC バージョンでは、サポートされません。
参考:
描画予約語一覧