Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Schriftarten unter FreeBASIC

von RedakteurVoltaSeite 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).
FBFonts

'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.

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  6  7  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 14.05.2008 von RedakteurVolta angelegt.
  • Die aktuellste Version wurde am 07.01.2013 von RedakteurVolta gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen