Referenz - CUSTOM
Syntax: { PUT | DRAW STRING } [Puffer, ] [STEP] (x, y), [ weitere Angaben ... ], CUSTOM, blender [, parameter]
Typ: Schlüsselwort
Kategorie: Grafik
CUSTOM ist ein Schlüsselwort, das im Zusammenhang mit PUT (Grafik) und DRAW STRING eingesetzt wird.
- 'blender' ist ein Pointer auf eine Funktion (siehe Tutorial zum Thema Callback-Funktionen) der Form
FUNCTION blender(BYVAL src AS ULONG, BYVAL dst AS ULONG, BYVAL parameter AS ANY PTR) AS ULONG
Die Parameter der Funktion 'blender' haben folgende Bedeutung:- 'src' ist die Farbe des auszugebenden Pixels (Bildquelle).
- 'dst' ist die Farbe des Pixels, das überschrieben werden soll (Hintergrund).
- Der Rückgabewert ist die Farbe des neuen Pixels.
- 'parameter' ist ein Pointer, der als drittes Argument an die Funktion 'blender' übergeben wird. Wird er ausgelassen, nimmt FreeBASIC automatisch parameter = 0 an.
Durch CUSTOM wird vor Ausgabe jedes einzelnen Pixels die FUNCTION 'blender' aufgerufen, um zu errechnen, in welcher Farbe das Pixel ausgegeben werden soll.
Diese Funktion wird für jedes neu zu zeichnende Pixel aufgerufen; die Farbe wird jedes mal neu berechnet. Achten Sie beim Einsatz dieses Aktionsworts darauf, dass die Ausführungsgeschwindigkeit unter aufwändigen Berechnungen leiden wird!
Beispiel:
Function dither(ByVal quellpixel As ULong, ByVal zielpixel As ULong, ByVal parameter As Any Ptr) As ULong
' gibt zufallsbedingt entweder das Pixel der Bildquelle oder des Hintergrunds zurück
Dim grenzwert As Single = 0.5
If parameter <> 0 Then grenzwert = *CPtr(Single Ptr, parameter)
If Rnd() < grenzwert Then
Return quellpixel
Else
Return zielpixel
End If
End Function
Dim img As Any Ptr, grenzwert As Single
' Bildschirm setzen
ScreenRes 320, 200, 16, 2
ScreenSet 0, 1
' Bild erzeugen
img = ImageCreate(32, 32)
Line img, ( 0, 0)-(15, 15), RGB(255, 0, 0), bf
Line img, (16, 0)-(31, 15), RGB( 0, 0, 255), bf
Line img, ( 0, 16)-(15, 31), RGB( 0, 255, 0), bf
Line img, (16, 16)-(31, 31), RGB(255, 0, 255), bf
' Bild mit verschiedenen Dither-Werten ausgeben
Do Until Len(Inkey)
Cls
grenzwert = 0.2
Put ( 80 - 16, 100 - 16), img, Custom, @dither, @grenzwert
' Standardwert = 0.5
Put (160 - 16, 100 - 16), img, Custom, @dither
grenzwert = 0.8
Put (240 - 16, 100 - 16), img, Custom, @dither, @grenzwert
ScreenCopy
Sleep 25
Loop
' Speicher freigeben
ImageDestroy img
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
- CUSTOM existiert seit FreeBASIC v0.14.
- 'parameter' existiert seit FreeBASIC v0.17. In älteren Versionen konnte dieser Parameter nicht übergeben werden.
Siehe auch:
PUT (Grafik), DRAW STRING, SCREENRES, AND (Methode), OR (Methode), XOR (Methode), PSET (Methode), PRESET (Methode), ADD, ALPHA, TRANS, Grafik
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|