Tutorial
Schriftarten unter FreeBASIC
von Volta | Seite 4 von 7 |
Eigene Fonts für Draw String erstellen
Für den Speicherbereich, in den man eigene Fonts unterbrigen kann, wird in FreeBASIC ein Image erstellt und die Zeichen als 'Bilder' dort eingebracht. Dazu müssen in das Image noch einige zusätzliche Informationen geschrieben werden.
Damit es erstmal etwas einfacher wird habe ich die FBFonts ausgelesen und in einfache (schwarz/weiß) BMP-Dateien gespeichert. Damit habe ich die notwendigen 'Bilder' für jedes ASCII-Zeichen (0 bis 255).
'test_myfont.bas
Screen 19, 32
Dim As Integer hoch = 14 '14 Pixel hoch
Dim As Integer breit = 8 * 256 '8 Pixel breit * 256 Zeichen
Dim bild_bmp As Any Ptr = ImageCreate( breit, hoch )
Bload( "FBFont8x14.bmp", bild_bmp )
Damit haben wir unsere Zeichen aus der FBFont8x14.bmp geladen.
Bauen wir uns den Font:
'Das Image für den Font bekommt eine Zeile mehr für die Zusatzinformationen
Dim As Ubyte Ptr myFont = ImageCreate( breit, hoch +1)
Dim As Integer p = 32 'der Imageheader hat 32 Byte
'In die erste Zeile wird der Fontheader eingetragen
myFont[p ] = 0 'Headerversion des Fonts, bisher immer 0
myFont[p +1] = 0 'erstes ASCII-Zeichen
myFont[p +2] = 255 'letztes ASCII-Zeichen
p += 3 'die ersten 3 Byte sind gesetzt
For i = 0 To 255 'Für jedes Zeichen wird die
myFont[p +i] = 8 'Pixelbreite eingetragen
Next
'Ab der zweiten Zeile werden die Zeichen in den Font gezeichnet
Put myFont, (0, 1), bild_bmp, (0, 0) - (breit -1, hoch), Or
ImageDestroy bild_bmp 'brauchen wir jetzt nicht mehr
Probieren wir gleich aus ob es so funktioniert:
Draw String (10, 16), "myFont: abcdefg ... UVWXYZ", , myFont
sleep
Diesen Font können wir mit BSave abspeichern und dann in anderen Programmen verwenden.
BSave( "FBFont8x14.Fbf", myFont, (breit*(hoch+1)*4)+32 )
ImageDestroy myFont
End
Probieren wir das auch gleich mal aus:
'test_bsave.bas
Screenres 400, 60, 32
Dim As Integer hoch = 14 '14 Pixel hoch
Dim As Integer breit = 8 * 256 '8 Pixel breit * 256 Zeichen
Dim As UByte Ptr myFont = ImageCreate( breit, hoch +1)
BLoad( "FBFont8x14.Fbf", myFont )
Draw String (20, 16), "myFont: abcdefg ... UVWXYZ", , myFont
Sleep
ImageDestroy myFont
Soweit sogut, aber schaut mal wie groß die Fbf-Datei geworden ist ... 121kB!
Die Datei FBFont8x14.bmp, aus der wir den Font gebastelt haben, hat gerade 4kB.
Leider lässt sich die Schreibfarbe bei eigenen Fonts nicht so einfach umstellen wie bei den internen FBFonts. Dazu muss man die CUSTOM-Funktion einsetzen, keine einfache Sache.
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|