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
  • Параметр цвета фона, который поддерживался в QB не поддерживается в FreeBASIC версии

См. также