Referenz - PAINT
Syntax: PAINT [Puffer] [, STEP] (x, y)[, [Füllfarbe][, Randfarbe] ]
Typ: Anweisung
Kategorie: Grafik
PAINT füllt in einem Grafikfenster einen Bereich mit einer Farbe. Das Verfahren ist auch bekannt als 'flood-fill' oder 'paint bucket'.
- 'Puffer' ist ein Speicherbereich wie ein mit IMAGECREATE erstellter Puffer oder ein Array. Beide können mit PUT angezeigt werden. Wird 'Puffer' ausgelassen, zeichnet FreeBASIC direkt auf den Bildschirm.
- 'x' und 'y' sind Koordinaten innerhalb der auszufüllenden Fläche.
- Wenn 'Füllfarbe' eine Zahl oder ein numerischer Ausdruck ist, wird die Fläche in der Farbe mit der angegebenen Farbnummer ausgefüllt. Für die Farbnummern gelten dann dieselben Regeln wie bei COLOR. Wenn hier ein STRING angegeben wird, behandelt FreeBASIC diesen als Muster, in dem die Fläche ausgefüllt werden soll.
- 'Randfarbe' ist die Farbnummer der Bereichsgrenze. PAINT füllt nur den Bereich innerhalb dieser Grenzen mit der Füllfarbe aus.
Ein Füllmuster beschreibt immer einen 8x8 Pixel großen Bereich. Jedes Zeichen innerhalb des Muster-Strings beschreibt dabei die Farbe eines Pixels. Je nach Farbtiefe können die Muster-Strings unterschiedlich lang sein; die maximale Länge berechnet sich aus den Formeln:
- Für Farbtiefen 1, 2, 4, 8: size = 8 * 8 = 64
- Für Farbtiefen 15 und 16: size = (8 * 8) * 2 = 128
- Für Farbtiefen 24 und 32: size = (8 * 8) * 4 = 256
size gibt dabei die benötigte Größe in Bytes an.
Wenn der übergebene String kleiner ist (weniger Zeichen besitzt), werden die fehlenden Bytes durch CHR(0) ersetzt.
Beispiel 1: Einen weißen, innen rot ausgefüllten Kreis zeichnen und 3 Sekunden warten
SCREENRES 320, 200
CIRCLE (160, 100), 30, 15
PAINT (160, 100), 1 , 15
SLEEP 3000
Beispiel 2: Verwendung eines Füllmusters
Const bit_tiefe = 8 ' Farbtiefe wählen - möglich ist 8, 16 oder 32
' Funktion zur Umwandlung eines Farbwertes in den für das Füllmuster benötigten String
Function paint_pixel( ByVal c As UInteger, ByVal tiefe As Integer ) As String
If tiefe <= 8 Then ' 8-bit:
Return Chr( CUByte(c) )
ElseIf tiefe <= 16 Then ' 16-bit:
Return MKShort( c Shr 3 And &h1f Or _
c Shr 5 And &h7e0 Or _
c Shr 8 And &hf800 )
ElseIf tiefe <= 32 Then ' 32-bit:
Return MKL(c)
End If
End Function
ScreenRes 320, 200, bit_tiefe ' Grafikfenster in gewünschter Bit-Tiefe öffnen
Dim As UInteger c, c1, c2 ' Variablen für die Farbwerte
Dim As UInteger randfarbe
Dim As String fuellmuster = "" ' Variable für das Füllmuster
' Farben setzen
If bit_tiefe <= 8 Then
c1 = 7 ' Füllfarbe 1
c2 = 8 ' Füllfarbe 2
randfarbe = 15 ' Randfarbe
Else
c1 = RGB(192, 192, 192) ' Füllfarbe 1
c2 = RGB(128, 128, 128) ' Füllfarbe 2
randfarbe = RGB(255, 255, 255) ' Randfarbe
End If
' Karomuster erstellen
For y As UInteger = 0 To 7
For x As UInteger = 0 To 7
' Farbe des Pixels wählen (c)
If (x \ 4 + y \ 4) Mod 2 > 0 Then
c = c1
Else
c = c2
End If
' Pixel zum Muster hinzufügen
fuellmuster &= paint_pixel(c, bit_tiefe)
Next x
Next y
' Kreis zeichnen und mit dem Muster füllen
Circle (160, 100), 50, randfarbe
Paint (160, 100), fuellmuster, randfarbe
Sleep
Unterschiede zu QB:
- Der optionale Parameter 'Hintergrund' existiert unter FreeBASIC nicht mehr.
- In FreeBASIC ist es möglich, in einen Datenpuffer zu zeichnen.
Siehe auch:
SCREENRES, COLOR (Anweisung), Grafik
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|