Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 05, 2025 17:37

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: True Type Schriftarten
BeitragVerfasst: Mo Aug 17, 2009 13:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich hab es am Wochenende endlich geschafft mich mal hinzusetzen und meine ganze library und Engine auf OpenGL ES 1.0 und 2.0 zu bringen.. das klappt nun auch wunderbar ohne probleme.. :)

Jetzt ist allerdings noch ein letztes kleines Problem: FreeType.
Das benutze ich um TTF Schriften zu laden... zwar könnte ich das ganze auch für's iPhone relativ problemlos compilieren etc, aber andererseits ist FreeType abgesehen von OpenGL die einzige fremd-lib die ich nutze...

Und es nervt mich jedesmal wenn ich zu einer neuen Platform komme das ich da erstmal mir FreeType weiß gott wie umständlich für compilieren muß etc.
Deswegen kam ich jetzt auf die Idee: Warum nicht TTF auch selber laden? :)

Stellt sich nur das problem, kennt jemand eine gute beschreibung des TTF Dateiformats?
Ich habe nur das bei Apple gefunden, aber das ist - apple-doku-typisch - für meinen Geschmack extrem unübersichtlich :/

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 13:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Microsoft hat eine Typography Webseite. Dort findest du unter anderem die OpenType specification. Sonderlich viel mehr aber auch nicht.

Allerdings würde ich den Umfang davon auf keinen Fall unterschätzen. Ich habe für die TextSuite versucht die cmap Tabelle auszulesen und auszuwerten. Das hatte leider nur mit einem entschiedenem Manchmal geklappt. Die Tabelle dient nur dazu um den CharCode in einen Glyphindex umzurechnen. Obwohl ich einen öffentlichen Code von Microsoft hatte habe ich es letzen Endes nicht hinbekommen. Bräuchte ich eh nur für Windows 9x. Von daher wars nicht so tragisch. Du darfst auch nicht vergessen, dass an FreeType schon auch ein paar Leute dran sitzen. Das machen die sicher auch nicht grundlos.

Hat das IPhone da nicht irgendeine Schnittstelle die du benutzen könntest? Bzw arbeitets du mit C++? Wenn ja. Was spricht dagegen den Code von FreeType auf das nötigste runter zu konfigurieren und dann direkt mit zu integrieren? Wie das zum Beispiel bei SDL_ttf ist. Also nur besser als SDL_ttf das macht. Ist klar.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 14:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Lossy eX hat geschrieben:
Hat das IPhone da nicht irgendeine Schnittstelle die du benutzen könntest? Bzw arbeitets du mit C++? Wenn ja. Was spricht dagegen den Code von FreeType auf das nötigste runter zu konfigurieren und dann direkt mit zu integrieren? Wie das zum Beispiel bei SDL_ttf ist. Also nur besser als SDL_ttf das macht. Ist klar.


Doch doch das iPhone bietet dafür was, hat soweit ich weiß sogar irgendwie FreeType mit integriert (stand zumindest mal irgendwo).. aber mir geht es grad auch weniger speziell um das iPhone sondern eher um alles andere wohin ich meine sachen nochmal portieren will :)

Das ständige fremd-libs besorgen, bzw compilieren auf neuen systemen ist nämlich genau das was mich am meisten stört und wo oft extrem viel zeit für drauf geht. Und nochdazu ist man dann immer darauf angewiesen das es die Fremdlibs für das system was man will auch gibt.. es war z.B. ein riesen kampf OpenEXR für 64bit zu compilieren damals.. mittlerweile gibt es da anleitungen für etc, aber damals war es mühevolle kleinarbeit die ewig gebraucht hat :(


Alternativ könnte ich natürlich echt FreeType einfach abspecken und integrieren.. aber da muß ich mich dann auch erstmal in deren source einarbeiten etc., da probier ich doch lieber erstmal es komplett selbst zu machen - zumal es mich auch einfach reizt. :)


Aya~

PS: Danke für den link :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 16:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Ich empfehle für alle Dateiformate als erste Anlaufstelle www.wotsit.org . In deinem Fall genauer:
http://www.wotsit.org/list.asp?search=ttf&button=GO%21
Aber scheinbar ist da auch nicht viel mehr als lossy geschrieben hat.

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 16:24 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
why not store the font as an outline path? In use that in my glvg unit. Have a read here: http://www.delphigl.com/launcher.php?em=forum

basicly a font would look like this:

Code:
  1.  
  2. 65: M 625.203125 302 L 625.203125 302 L 274.046875 302 L 274.046875 302 L 213 159.96875 C 213 159.96875 190.34375 107.4375 190.34375 81.515625 C 190.34375 81.515625 190.34375 60.90625 210 45.28125 C 210 45.28125 229.65625 29.65625 294.984375 25 L 294.984375 25 L 294.984375 0 L 294.984375 0 L 9.328125 0 L 9.328125 0 L 9.328125 25 C 9.328125 25 65.984375 35 82.640625 51.015625 C 82.640625 51.015625 116.625 83.03125 157.953125 181.078125 L 157.953125 181.078125 L 476.203125 924 L 476.203125 924 L 500.265625 924 L 500.265625 924 L 815 172.625 C 815 172.625 852.984375 82.1875 883.9765625 55.2578125 C 883.9765625 55.2578125 914.96875 28.328125 970.296875 25 L 970.296875 25 L 970.296875 0 L 970.296875 0 L 613.71875 0 L 613.71875 0 L 613.71875 25 C 613.71875 25 667.703125 27.65625 686.6953125 42.953125 C 686.6953125 42.953125 705.6875 58.25 705.6875 80.203125 C 705.6875 80.203125 705.6875 109.46875 679.03125 172.640625 L 679.03125 172.640625 M 604.828125 351 L 604.828125 351 L 452.5 716.234375 L 452.5 716.234375 L 295.109375 351 L 295.109375 351 z
  3.  


This is just the A character. E.g. each line would feature a character. E.g. the above is one line.

Here is the glvg project svn: http://thuis.vanderhoning.net/svn_glvg/trunk/

Currently i am trying to render a cubic spline using a fragment shader, but failing totaly :-( .

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 17, 2009 16:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
noeska hat geschrieben:
why not store the font as an outline path? In use that in my glvg unit. Have a read here: http://www.delphigl.com/launcher.php?em=forum

I just don't want to convert any Font I'd like to use to an outline-path... specially if it's unicode, there are too many characters to convert everything..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 00:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
So,

hab mich mal drangesetzt an's TTF Format.. nach anfänglichen schwierigkeiten komme ich jetzt ganz gut vorran und habe auch schon die meisten der Tables eingelesen und verarbeitet.. nur, das problem was ich grad noch habe ist, das ich es nur recht schwer testen kann ob alles so stimmt was ich da tue :/

z.B. bei der CMAP bin ich mir unsicher ob ich wirklich den glyph-index richtig berechne.. aber wüsste grad auch nicht wie ich überprüfen kann ob es stimmt, solange ich noch nicht den glyph selbst darstellen kann..

Hat da evtl jemand ne idee? oder weiß jemand ein paar glyph-indices von z.B. Arial..? :)

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 08:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich denke da gibt es sicher mehr als eine Lösung. In der Windows API gibt es die Methode GetGlyphIndicesW. Der übergibst du einen String und erhältst ein Array mit Indizes zurück. Ich denke das eine Flag ist auch wichtig um zu sehen ob die Zeichen existieren. In meiner Bibliothek benutze ich dafür GetCharacterPlacementW. Im groben und ganze läuft es da ähnlich. Ich übergebe einen Text und eine Struktur wird gefüllt. In der sind neben den Indizes auch noch weitere Werte enthalten. Allerdings brauch ich die so jetzt auch nicht wirklich. ;)

[edit: zu früh da fehlt noch was] Du musst mit CreateFont ein Font erstellen und an einen DC zuweisen. Der DC kann auch ein CreateCompatibleDC von 0 sein. Anschließend das Font mittels SelectObject an den DC zuweisen. Dann kannst du im Code direkt erfragen ob das was du berechnet hast dem entspricht was im Font steckt. Du solltest im übrigen auch Sonderzeichen erfragen. Also so etwas wie "hallo spencer" wird klappen sobald der Anfang des Blockes hinhaut. Denn die Standard Zeichen befinden sich typischerweise alle in einem Block im Font. Also wenn das Leerzeichen hinhaut sollte der Rest auch stimmen. Da solltest du quer durch die Unicoderanges mal antesten bzw auch mehr als ein Font überprüfen. Denn die Fonts sind keineswegs alle gleich aufgebaut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 17:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
So, hab das mit GetGlyphIndices mal überprüft und das stimmt soweit alles.. jetzt bin ich nur mehr oder weniger an dem Punkt, dass ich den Glyph den ich mir jetzt raussuchen kann etc auch darstellen will..

Genauer gesagt an dem Punkt wo ich immer dachte "Dir wird schon was einfallen wenn du soweit bist.." xD

Ich habe also jetzt alle informationen aus der 'glyf' tabelle (sprich alle koordinaten etc für das Zeichnen), aber weiß nicht wie ich das ganze Rastern soll..
In den Specs ist nur die rede vom "TrueType Rasterizer" der mit dem OS mitgeliefert wird..

Hat irgendwer ne ahnung wie die glyph's gerastert werden?
Also, sind das bezier curven oder irgendwelche splines etc..?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 20:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
While doing some searching on ttf files i found the following:
http://www.truetype-typography.com/ttoutln.htm Now this describes that all ttf curves are quadratic splines. Now i suddenly realize i made a major mistake in the font generation tool in glvg as i mistakingly marked the font outlines as cubic splines instead of quadratic splines. They render fine in both ways though. E.g. in my above font example where C is used it should have been Q.

Apple has also info in the ttf fileformat: http://developer.apple.com/textfonts/TT ... 6glyf.html
Indeed it seem you need the glyf section, but i do not see info what a line is or what a qspline is. Info that i do get with getglyphinfo on windows.

Maybe even the normal lines are stored as qsplines?

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 18, 2009 22:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 04, 2008 23:15
Beiträge: 39
Wohnort: Oberösterreich
Programmiersprache: ObjPas, C, DivASM
Hallo,

In der Windows API gibt es die Function "GetGlyphOutline". Mit der man je nach Parameter die outline, eine Bitmap oder auch ein 8Bit graustufen Bild erhält.
http://msdn.microsoft.com/en-us/library/dd144891

humflo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 19, 2009 10:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
@Noeska: Thanks a lot for the links, that's what I was searching for :)
@Humflo: Mir geht es ja grade darum nicht abhängig von irgendeiner API oder sonstwas zu sein ;)


Bin gestern leider nichmehr wirklich zu gekommen das ganze weiter zu machen, allerdings hänge ich grad doch noch bei der glyf tabelle:
http://www.microsoft.com/typography/otspec/glyf.htm

Das was dort unter "Simple Glyph Description" steht.. die ersten 3 parameter sind ja klar, aber dann fängt es an mit flags, was ein array ist.
Ich kann aber nirgendwo sehen wie lang dieser Array ist.. das gleiche dann für die coordinaten. Woher weiß ich die länge?

Und eine andere sache, was ist ein "Compound Glyph"?
Ich hab mal ein paar buchstaben durchprobiert und es kam immer nur ein Simple Glyph (numberOfContours > 0) bei raus.

Aya~

PS: Wenn ich das ding hinbekomme, bestünde dann interesse daran das ich das als lib oder sonstwas rausgeb?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 19, 2009 11:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
Some assumptions:
A glyph is not a character. You need the cmap table for that.
A character can contain multiple glyphs.
A glyph may be compound e.g. be constructed from other glyphs.
There should be glyps with a number of contours greater than 0. If so you know how to read the Simply glyph description.
Could the number of countours reale be the number flags?

Have a read here: http://74.125.77.132/search?q=cache:nce ... clnk&gl=nl (but you already have)

Maybe you might want to get this book: http://www.fengyuan.com/

It would be nice to have ttf reading class. Might drop another windows dependency.

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 19, 2009 12:20 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Compound Glyphs sollten, soweit ich mich erinnere, hauptsächlich bei Sprachen mit diversen ^ ' ´ ` usw. auftreten.
Oder auch bei Chinesischen oder Arabischen Schriftzeichen. Kann dir hier aber keine konkreten Beispiele nennen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 20, 2009 22:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Aya hat geschrieben:
PS: Wenn ich das ding hinbekomme, bestünde dann interesse daran das ich das als lib oder sonstwas rausgeb?

Wenns OpenSource ist - definitiv JA. An einer "verschlossenen" DLL hätte ich kein Interesse.
Traude


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]