|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Stormy
Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 22.04.2006, 17:31 Titel: Bitmap-Fonts in FreeBASIC |
|
|
Hi Community,
ich habe hier eine kleine Schriftroutine geschrieben, welche es erlaubt 16x16 Pixel große Schriften zu laden und darzustellen.
Hier erstmal ein Screenshot:
Folgende Funktionen und Subs kann ich euch bieten:
Zitat: | DECLARE SUB CreateDataFile (Source AS String, Destination AS String)
DECLARE SUB FontLoad (Font AS FontSystem, SourceFile AS STRING, DataFile AS STRING)
DECLARE SUB FontPrint (Font AS FontSystem, Text AS STRING, X, Y)
DECLARE FUNCTION FontGetWidth (Font AS FontSystem, Text AS STRING) AS INTEGER
DECLARE SUB DestroyFont (Font AS FontSystem) |
Zu jeder Schriftgrafikdatei gehört eine Datafile, die Breite und Höhe der Buchstaben speichert. Beispiel: "MeineSchrift.bmp" (Grafik) + "MeineSchrift.dat" (Datafile)
a) Schrift laden und ausgeben:
Code: | DIM AS FontSystem MyFont
SCREENRES 640,480,32
CALL FontLoad (MyFont, "font/standard.bmp", "font/standard.dat")
FontPrint (MyFont, "Hallo Welt!", 0,0) |
b) Schrift aus Speicher entfernen:
Code: | DestroyFont (MyFont) |
c) Eigene Schrift erstellen und verwenden:
Wenn man seine eigenen Schriften einfügen möchte, benutzt man am besten das Programm Bitmap Font Builder und stellt bei der Schriftgröße 16x16 Pixel ein.
Wenn man seine Grafikdatei fertiggestellt hat, benutzt man einfach das SUB CreateDataFile !
Code: | CALL CreateDataFile ("font/arial.bmp", "font/arial.dat") |
Danach kann man wie gewohnt seine Schrift laden (Siehe a)
d) Download
font.zip (22,2 KB) (Quelltext + Beispiel)
Kommentare, Kritik, etc. sind natürlich ausdrücklich erbeten ! _________________ +++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 22.04.2006, 17:36 Titel: |
|
|
Sieht wirklich gut aus
Aber nimm's mir nicht übel: So schwierig ist es nicht, sich sowas zusammenzubasteln
Ich finde, Font-Routinen für Schriftarten mit variierenden Breiten (wie z.B. Arial, Verdana, etc.) würden sich eher lohnen...
Gefällt mir trotzdem sehr gut _________________ Elektronik und Programmieren |
|
Nach oben |
|
|
Stormy
Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 22.04.2006, 17:49 Titel: |
|
|
jb hat Folgendes geschrieben: | Sieht wirklich gut aus
Aber nimm's mir nicht übel: So schwierig ist es nicht, sich sowas zusammenzubasteln
Ich finde, Font-Routinen für Schriftarten mit variierenden Breiten (wie z.B. Arial, Verdana, etc.) würden sich eher lohnen...
Gefällt mir trotzdem sehr gut |
Ja, ich hab auch selber nicht lange gebraucht sowas selber zu basteln, aber diese Routine richtet sich eher an die Anfänger, die trotz ihrer bescheidenen Programmierkünste dennoch bestimmte Schriftarten verwenden wollen. Profis können ja sowas wie FreeType2 verwenden.
Zu der variierenden Breite: Wenn du dir genau den Screenshot anschaust, dann sieht man, dass die einzelnen Buchstaben sich doch in ihrer Breite variieren können. Bei den letzten beiden Zeilen sieht man es am deutlichsten. Das einzige unveränderliche bei meiner Routine ist die Höhe, aber durch ein paar Handgriffe kann man auch dies ändern. _________________ +++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 22.04.2006, 17:59 Titel: |
|
|
Dann nehme ich alles zurück und behaupte das Gegenteil
Hatte ich echt übersehen, ich dachte halt, es wäre mal wieder so eine Art Courier-Ersatz...
Nichts für Ungut,
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 22.04.2006, 22:00 Titel: |
|
|
Hi,
gute Idee.
Zwei Vorschläge für die nächste Version
1. FontPrint könnte schneller sein, erster Vorschlag: Code: | curX = (c and 15) shl 4 '(c MOD (256/16))*16
curY = c and &HF0 'FIX(c/(256/16))*16 | kommt in der fontsystem.bi mehrfach vor.
2. etwas redundanter, begrenzt aber die Zeichengröße auf 256 x 256: Code: | TYPE FontChar
Width AS UBYTE 'INTEGER
Height AS UBYTE 'INTEGER
Left AS UBYTE 'INTEGER
Right AS UBYTE 'INTEGER
END TYPE
TYPE FontSystem
Char(0 TO 255) AS FontChar
Handle AS UBYTE PTR
Spacing AS UBYTE 'INTEGER
R AS UBYTE
G AS UBYTE
B AS UBYTE
Fixed AS UBYTE
END TYPE | Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 22.04.2006, 22:32 Titel: |
|
|
volta hat Folgendes geschrieben: | 2. etwas redundanter, begrenzt aber die Zeichengröße auf 256x256 |
jap, wir bruachen ja auch unbedingt schriftgröße 200 _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 23.04.2006, 14:45 Titel: |
|
|
noch ein Vorschlag:
besser lesbar durch breiteren 'Space'
Code: | ...
If c = 32 Then 'Space
.Right = 2
.Left = 0
End If
.Width = Abs(.Right - .Left) + 1
.Height = 16
End With
... |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
Stormy
Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|