Paint
 
填充由指定颜色的边框分隔的区域

语法

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

参数

target
指定要绘制的缓冲区。
STEP
表示坐标是相对的
(x , y )
开始洪水填充的像素的坐标(油漆)
paint
颜色属性或填充图案
数值表示颜色,而字符串表示填充图案
border_color
边界颜色为填充

说明

图形命令填充由指定颜色的边框分隔的区域。也称为“灌水”或“油漆桶”。

Paint可以在ScreenSet语句或目标Get/ Put缓冲区设置的当前工作页面上进行操作(如果指定)。

填充开始于指定的(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 ,则假定当前的背景颜色。

例子

'画一个白色的圆圈内涂蓝色
Screen 13
Circle (160, 100), 30, 15
Paint (160, 100), 1, 15
Sleep


'画一个圆圈,并用方格图案填充

''选择屏幕的位深度
''尝试将其设置为其他值:8,16或32

Const bit_depth = 8

''用于返回像素颜色的函数,表示为字符串
''以适当的格式返回当前位深度的字符串
Function paint_pixel( ByVal c As UInteger, ByVal bit_depth_ As Integer ) As String
    
    If bit_depth_ <= 8 Then ''8位:
        Function =  Chr( CUByte(c) )
        
    ElseIf bit_depth_ <= 16 Then ''16位:
        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位:
        Function = MKL(c)
        
    End If
    
End Function


''在所选位深度打开图形窗口
ScreenRes 320, 200, bit_depth

''声明保存颜色的变量
Dim As UInteger c, c1, c2, cb

''声明用于保存在Paint中使用的模式的字符串变量
Dim As String paint_pattern = ""

''设置颜色
If bit_depth <= 8 Then
    c1 = 7  ''图案颜色1
    c2 = 8  ''图案颜色2
    cb = 15 ''边框颜色
Else
    c1 = RGB(192, 192, 192) ''图案颜色1
    c2 = RGB(128, 128, 128) ''图案颜色2
    cb = RGB(255, 255, 255) ''边框颜色
End If

''使图案在Paint中使用
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
  • FreeBASIC版本不支持QB支持的背景颜色参数

参考