Seite 1 von 3

Typeface - Sprite-based Schrift-Include/Module

Verfasst: 06.08.2010 19:52
von STARGÅTE
Pure Basic Module: Typeface - Sprite basierte Engine zum Anzeigen von Texten mit Bitmap-Fonts

Direkt Download des Includes: Typeface.pbi (Version 1.4.2)
Download einer ZIP mit Include, Beispiel, zwei Schriften und dem Editor: Typeface_20180930.zip

Features des Includes:
  • Aufbau der Funktionen im "PB"-Standard (Benutzen von Kostanten oder #PB_Any, der ganze Kram halt^^)
  • Einladen von Bitmap-Fonts (XML oder TF)
  • Unicode und Kerning Unterstützung
  • Anzeige und Abmessung von Texten auf dem Screen
  • Ändern der Farbe und Deckkraft
  • Ändern der Größe, Rotation (auch "3D") und Biegung
  • Ausrichtung und Kursivität
  • Anzeige-Clipping und Word Wrap
Features des Editors:
  • Laden und Speichern von Bitmap-Fonts (XML oder TF)
  • Erstellen von Typefaces aus TTF-Fonts
  • Bearbeiten des Font-Images
  • Bearbeiten der Zeichen und Kerningpaare
Bild

Details:

Dieses Include arbeitet (neben einem XML-Format) auch mit einem eigenen Dateiformat
(Typischerweise *.tf) in welchem die Daten zur Schrift und das Bild der Schrift enthalten sind.
Um dieses Dateiformat zu bearbeiten habe ich auch einen Editor geschrieben,
damit die Typefaces erstellt, bearbeitet und gespeichert werden können.
Mit dem Editor können auch komplett eigene Schriften erstellt werden, z.B. aus einem Bild,
auch dafür ist ein Beispiel enthalten, oder einfach eine TTF importiert werden.

XML-Aufbau:

Code: Alles auswählen

<Typeface Version="1.4" Image="Example.png"> <!-- Dateiname des Bilds (relativ zur XML) -->
   <Attribute Name="Comment">Union Bytes</Attribute> <!-- Kommentare -->
   <Character Index="65"> <!-- Zeichenindex (hier das große A)-->
      <Source X="344" Y="38" Width="27" Height="38"/> <!-- Position und Größe im Bild -->
      <Outlay X="-8" Y="-8" Width="11" Height="22"/> <!-- Anzeigeoffset und Textflussgröße -->
   </Character>
   <KerningPair Left="39" Right="65" Amount="-1"/> <!-- Kerning-Paar mit beiden Zeichen und die Verschiebung -->
</Typeface>

Re: Include - Typeface, Sprite3D-Schrift (färbbar, biegbar,

Verfasst: 06.08.2010 20:07
von Christian+
Also ich habe mir das bis jetzt nur mal ganz kurz angeschaut aber das ist einfach super. Ich werde mir das gleich morgen noch mal gründlich anschauen. Besonders die Effekte die damit möglich sind finde ich einfach super so was wollte ich schon lange.
mfg Christian+

Re: Include - Typeface, Sprite3D-Schrift (färbbar, biegbar,

Verfasst: 06.08.2010 20:38
von rolaf
Das sieht ja mal echt fett aus. :shock: :allright:

Re: Include - Typeface, Sprite3D-Schrift (färbbar, biegbar,

Verfasst: 07.08.2010 07:37
von Rings
Klasse, 1A

:allright: :allright: :allright:

Re: Include - Typeface, Sprite3D-Schrift (färbbar, biegbar,

Verfasst: 07.08.2010 13:55
von mk-soft
Klasse. Das man mit so wenig Code so viel erreichen kann :allright:

Re: Include - Typeface, Sprite3D-Schrift (färbbar, biegbar,

Verfasst: 07.08.2010 17:00
von Christian+
So ich habe das heute mal gründlich durch getestet gefällt mir sehr gut und vor allem das Farbe ändern ist auch echt praktisch allerdings bin ich auf etwas seltsames gestoßen und zwar wird immer am Anfang ganz kurz der erste Buchstabe riesig angezeigt bevor er wieder verschwindet habe das Orginal Beispiel mal so angepasst dass man es da auch sieht.

Code: Alles auswählen

XIncludeFile "Typeface.pbi"

InitSprite()
InitSprite3D()

Enumeration
 #Window
 #Typeface
 #TypefaceVariation
EndEnumeration

OpenWindow(#Window, 0, 0, 1000, 700, "Screen", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Window), 0, 0, WindowWidth(#Window), WindowHeight(#Window), 0, 0, 0)
  
 UsePNGImageDecoder()
 LoadTypeface(#Typeface, "Normal.tf")
 ;LoadTypeface(#Typeface, "Arial20.tf")
 CreateTypefaceVariation(#TypefaceVariation, #Typeface)
  
 
 Sprite3DQuality(1)
 
Repeat

 ClearScreen(0)

 Start3D()
 
  z.f = ElapsedMilliseconds()*0.001
  
  DisplayTypeface(#Typeface, 250, 100, "Mit 'Typeface' kann ganz normaler Text geschrieben werden.")
  
 Stop3D()
 
 FlipBuffers()

Until WindowEvent() = #PB_Event_CloseWindow

Re: Include - Typeface, Sprite3D-Schrift (färbbar, biegbar,

Verfasst: 07.08.2010 19:24
von STARGÅTE
Seh interessant, es blitzt wirklich immer ein großen M am anfang auf ...
Vermutlich hat es etwas mit der Variable : "TypefaceDX9\Transformed" zu tun

Durch hin und herprobieren, und ohne zu wissen ob es richtig ist, muss ich TypefaceDX9\Transformed = #True setzen vor einem Display.
Außerdem ist mir eben aufgefallen das TypefaceDX9\Vertice\Color nicht $BBGGRR verwendet sonden $RRGGBB, um es aber PB-Kompatibel zu machen, kommt noch n vertauschung mit rein.

Ist die die Lösung in der Prozedure: DisplayTypeface() ist also, oben folgende Zeilen zu ändern:

Code: Alles auswählen

; [...]
 EndWith
 Color = Color&$00FF00 + (Color&$FF)<<16 + (Color&$FF0000)>>16 
 *DX9\Vertice[0]\Color = Color
 *DX9\Vertice[1]\Color = Color
 *DX9\Vertice[2]\Color = Color
 *DX9\Vertice[3]\Color = Color
 *DX9\Transformed = 1
 If Angle Or Turn
Ich hab nun ZIP und Include aktuallisiert.

Und danke an alle denen mein Include gefällt.

Re: Include - Typeface, Sprite3D-Schrift (färbbar, biegbar,

Verfasst: 07.08.2010 19:42
von Christian+
Super das ging ja flott werde gleich mal schauen ob jetzt alles klappt oder ob mir noch was auffällt das mit dem BBGGRR statt RRGGBB war ist mir auch schon aufgefallen hatte ich nur dann vergessen da ich es gleich am Anfang selbst geändert hatte.

Re: Include - Typeface, Sprite3D-Schrift (färbbar, biegbar,

Verfasst: 10.08.2010 02:27
von STARGÅTE
Oh jee Leute, mir ist eben ein riesen Fehler aufgefallen,
als ich eben eine kleine Test-Font (mit Rotem Rahmen) erstellt habe und da mal original Buchstabe mit DisplayTypeface verglichen habe, war DisplayTypeface leicht verschwommen gegenüber dem original.

Nach langem hin und her bin ich auf die Ursache gestoßen.
Wenn ich zB ein 32x32 Bild an Position 10, 10 mit DisplaySprite3D() darstelle, dann dachte ich erst, diese Koordianten kann ich auch für die Struktur einsetzen: x1=10 ... x2=42 ...
Falsch Gedacht!
denn dadurch würde ich eine verschiebung von 0.5 Pixel haben,
denn die Koordinaten der DX9-Struktur beziehen sich immer auf den Pixel-Mittelpunkt!
Es muss also: x1=9.5 ... x2=41.5 lauten!
Diese 0.5 Pixel, die alle Buchstaben verschoben wahren, vielen mir bei den Beispielen garnicht auf, nur eine leichte Unschärfe war du erkennen, da dachte ich aber das kommt vom Float-Clippen.

Lange Rede, kurzer Sinn, dieser (im Endeffekt doch recht schwere) Bug ist nun behoben!

Re: Include - Typeface, Sprite3D-Schrift (färbbar, biegbar,

Verfasst: 12.07.2013 15:29
von STARGÅTE
Hier ist ein Update meines Typeface-Includes für PB 5.20 und einigen Änderungen.
So kann eine Font nun einfach mit XML und einem Bild eingeladen werden (siehe Beispiel).

Typeface.zip (veraltet)
Benötigt PB 5.20 !

Features:
  • Textdarstellung mit beliebigen Zeichensätzen (XML & Bild)
  • Intensität und Farbe
  • (sauberer) Zoom, Rotation und Biegung
  • Kursivdarstellung mit beliebigen WInkeln
  • Unicode, Kerning und Zeichenabstand
Bild

XML-Aufbau:

Code: Alles auswählen

<Typeface Image="Example.png"> <!-- Dateiname des Bilds -->
   <Character Index="65"> <!-- character with index -->
      <Source X="344" Y="38" Width="27" Height="38"/> <!-- Position und Größe im Bild -->
      <Outlay X="-8" Y="-8" Width="11" Height="22"/> <!-- Anzeigeoffset und Textflussgröße ->
   </Character>
   <KerningPair Left="39" Right="65" Amount="-1"/> <!-- Kerning-Paar mit beiden Zeichen und die Verschiebung -->
</Typeface>