Mir ist klar, dass ich im Wesentlichen nichts darüber weiß, wie Schriftarten auf meinem Computer gerendert werden.
Soweit ich beobachten kann, erfolgt das Rendern von Schriftarten im Allgemeinen systemweit einheitlich. Beispielsweise haben die Einstellungen für Subpixel-Schriftarten, die ich in meinem DE-Kontrollfeld konfiguriere, Einfluss auf Text, der an Fensterrändern, in meinem Browser, in meinem Texteditor usw. angezeigt wird. (Ich sollte beachten, dass einige Java-Anwendungen einen spürbaren Unterschied aufweisen, daher verwenden sie vermutlich einen anderen Mechanismus zum Rendern von Schriftarten.)
Was ich aus dem oben Gesagten erhalte, ist, dass wahrscheinlich alle Anwendungen, die das Rendern von Schriftarten benötigen, eine betriebssystem- (oder DE-) Bibliothek verwenden.
Auf der anderen Seite verwalten Browser normalerweise ihr eigenes Rendering über eine Rendering-Engine, die sich darum kümmert, verschiedene Elemente - einschließlich Text - gemäß bestimmten Ablaufregeln zu positionieren.
Ich bin mir nicht sicher, wie diese beiden Tatsachen miteinander vereinbar sind. Ich würde annehmen, dass der Browser das Betriebssystem bitten müsste, eine Glyphe an einer bestimmten Position zu zeichnen, aber wie kann er den Textfluss verwalten, ohne vorher zu wissen, wie viel Platz die Glyphe einnehmen wird? Gibt es separate Aufrufe zum Bestimmen der Glyphengrößen, damit der Browser den Fluss so verwalten kann, als wären Zeichen kleine Kästchen, die später vom Betriebssystem ausgefüllt werden? (Obwohl dies nicht für das Kerning sorgt). Oder ist das Betriebssystem für das Zeichnen eines gesamten Textbereichs einschließlich des Textflusses verantwortlich? Gibt das Betriebssystem die gerenderte Glyphe als Bitmap zurück und überlässt sie der Anwendung, um sie auf dem Bildschirm zu zeichnen?
Antworten:
Sie haben Recht, dass Anwendungen im Allgemeinen vom Betriebssystem bereitgestellte Bibliotheken oder ein GUI-Toolkit verwenden, um Schriftarten zu rendern.
Typische Font-Engines ermöglichen eine Reihe von Betriebsarten. Für den einfachen Fall kann eine Anwendung verlangen, dass an einer bestimmten Position eine Textzeichenfolge gezeichnet wird, und die Engine kümmert sich um alles (Messen, Positionieren, Zeichnen der Pixel auf dem Display usw.).
Für Anwendungen, die ein genaueres Maß an Kontrolle erfordern - beispielsweise Browser oder Textverarbeitungsprogramme - stellt die Engine Schnittstellen bereit, an denen die App vorab die Messung eines bestimmten Textes anfordern kann. Die App kann dieses Wissen dann verwenden, um herauszufinden, wie viel Text in eine Zeile passen kann, wo die Zeilenumbrüche sein sollten, wie viel Platz ein Absatz einnimmt usw. Die App kann die Engine weiterhin auffordern, das eigentliche Rendern durchzuführen der Pixel.
(Es kann ein Zwischenszenario geben, in dem die Engine einen Parameter mit maximaler Breite und möglicherweise einige Kerning- / Padding-Parameter verwenden und automatisch so viel Text rendern kann, wie passt.)
Schließlich kann die Font-Engine der App ermöglichen, das endgültige Rendern des Texts zu übernehmen, indem Bitmaps von Glyphen zurückgegeben werden, die in einer bestimmten Größe vorgerendert wurden, sodass die App sie positionieren und auf der endgültigen Anzeige zusammensetzen kann. Oder die Engine bietet sogar an, die Rohdaten der Glyphenumrisse für das Rendern mit einem Vektor-Toolkit zurückzugeben.
quelle