Tutorial
Schriftarten unter FreeBASIC
von Volta | Seite 5 von 7 |
Schriftfarbe mit CUSTOM-Funktion ändern
Wie funktioniert das nun mit der CUSTOM-Funktion?
Für jeden Pixel den die STRING DRAW - Anweisung malt wird die Angegebene CUSTOM-Funktion aufgerufen.
Draw String (x, y), "Text", , myFont, CUSTOM, @Funktionsname, @Parameter
An den Draw String Aufruf wird nach dem Schlüsselwort CUSTOM ein Pointer auf die CUSTOM-Funktion und (optional) ein Pointer auf einen zusätzlichen Parameter (Wert) angegeben.
Der CUSTOM-Funktion werden immer 3 Werte übergeben und sie gibt einen Wert (UInteger), das ist dann die Farbe des Pixels, zürück. Die 3 Werte sind:
src As UInteger | Pixelfarbe (RGBA) aus myFont (Quelle) |
dest As UInteger | Pixelfarbe (RGBA) des Zielpunktes |
param As UInteger Ptr | Pointer auf einen beliebigen Wert |
In der Funktion kann man nun auswerten ob der (Font)Pixel Hintergrund (&hffff00ff) oder ein Pixel mit der Schriftfarbe ist. Bei Hintergrundfarbe bleibt die Pixelfarbe des Zielpunktes, bei Schriftfarbe wird der Pixel mit der in parm übergebenen Farbe gezeichnet.
Function font_color( ByVal src As UInteger, ByVal dest As UInteger, _
ByVal param As UInteger Ptr ) As UInteger
Function = IIf( src = &hffff00ff, dest, *param )
End Function
Als Beispiel hier mit der Schriftfarbe rot:
...
Dim as UInteger fg = RGB(255, 0, 0)
Draw String (20, 16), "myFont: abcdefg ... UVWXYZ", , myFont, CUSTOM, @font_color, @fg
Hier eine CUSTOM-Funktion die als Schriftfarbe immer die Hintergrundfarbe des Zielbereichs invertiert. Damit sollte eine Schrift auch auf sehr bunten Hintergrund immer sichtbar sein.
Function font_invert( ByVal src As UInteger, ByVal dest As UInteger, _
ByVal param As Any Ptr ) As UInteger
Function = IIf( src = &hffff00ff, dest, dest Xor &h00ffffff )
End Function
Auf einem schwarzen Hintergrund erscheint weiße Schriftfarbe, als Schrift auf einem Foto ist der Effekt am deutlichsten.
...
Draw String (20, 16), "myFont: abcdefg ... UVWXYZ", , myFont, CUSTOM, @font_invert
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|