Typeface - Sprite-based Schrift-Include/Module

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Typeface - Sprite-based Schrift-Include/Module

Beitrag 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>
Zuletzt geändert von STARGÅTE am 30.09.2018 17:48, insgesamt 11-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

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

Beitrag 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+
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

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

Beitrag von rolaf »

Das sieht ja mal echt fett aus. :shock: :allright:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

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

Beitrag von Rings »

Klasse, 1A

:allright: :allright: :allright:
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

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

Beitrag von mk-soft »

Klasse. Das man mit so wenig Code so viel erreichen kann :allright:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

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

Beitrag 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
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

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

Beitrag 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.
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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>
Zuletzt geändert von STARGÅTE am 30.09.2018 17:24, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten