Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Bitmap-Fonts in FreeBASIC

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
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 ;)

BeitragVerfasst am: 22.04.2006, 17:31    Titel: Bitmap-Fonts in FreeBASIC Antworten mit Zitat

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 ! lächeln
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.04.2006, 17:36    Titel: Antworten mit Zitat

Sieht wirklich gut aus lächeln

Aber nimm's mir nicht übel: So schwierig ist es nicht, sich sowas zusammenzubasteln zwinkern
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 Daumen rauf!
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 22.04.2006, 17:49    Titel: Antworten mit Zitat

jb hat Folgendes geschrieben:
Sieht wirklich gut aus lächeln

Aber nimm's mir nicht übel: So schwierig ist es nicht, sich sowas zusammenzubasteln zwinkern
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 Daumen rauf!


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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.04.2006, 17:59    Titel: Antworten mit Zitat

Dann nehme ich alles zurück und behaupte das Gegenteil zwinkern
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 22.04.2006, 22:00    Titel: Antworten mit Zitat

Hi,
gute Idee.

Zwei Vorschläge für die nächste Version zwinkern
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 22.04.2006, 22:32    Titel: Antworten mit Zitat

volta hat Folgendes geschrieben:
2. etwas redundanter, begrenzt aber die Zeichengröße auf 256x256


jap, wir bruachen ja auch unbedingt schriftgröße 200 durchgeknallt lachen
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 23.04.2006, 14:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 23.04.2006, 14:59    Titel: Antworten mit Zitat

Cool, Danke für die vielen Vorschläge volta ! lächeln
_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz