2017-02-10 4 views
11

Ich würde gerne wissen, wie man die Höhe einer bestimmten Schriftart (mit seinen Eigenschaften, wie Größe, Gewicht, Stil ...) in einem Windows Universal Application mit Win2D berechnen.Wie berechnet man die Höhe einer FontFamily mit Win2D (Zeilenabstand)?

Früher habe ich zuvor ein CanvasTextLayout, aber es erfordert einen Text zu arbeiten, wie in dieser Zeile:

var ctl = new CanvasTextLayout(session, "Some text", new CanvasTextFormat(), constraintWidth, constraintHeight);

In meinem Fall, Ich habe keinen Text, denn nach was ich suche, ist die Höhe, in der alle Glyphen einer gegebenen Schriftart (mit seinem Stil, Größe, Gewicht ...) passen.

EDIT: Ich habe auch mit der CanvasFontFace Klasse versucht, aber es scheint, es keinen öffentlichen Konstruktor hat.

+0

Suchen Sie nach GetGlyphRunBounds https://microsoft.github.io/Win2D/html/Overload_Microsoft_Graphics_Canvas_Text_CanvasFontFace_GetGlyphRunBounds.htm? Sonst hat CanvasTexFormat eine FontSize-Eigenschaft, wie bei Schriftfamilien üblich –

+0

Ich denke, GetGlyphRunBounds ist nicht das, was ich brauche, da ich mindestens ein Glyph angeben müsste. Es ist das genaue Äquivalent zu dieser Frage, aber in Win2D. http://stackoverflow.com/questions/4509613/how-to-calculate-font-height-in-wpf. Bitte, sehen Sie sich die Antwort an. In WPF heißt es "LineSpacing". – SuperJMN

+0

Ich glaube nicht, dass Sie den Standard 'LineSpacing' wie in WPF bekommen können. Sie müssen zuerst den Text zeichnen. Dies ist eine Einschränkung von Win2D. –

Antwort

5

Aber Sie sind schon auf dem richtigen Weg. Du siehst. G. fg als Text. Die f teilt den oberen Bereich, die g die untere, so dass Sie die Gesamthöhe eines Textes in der aktuellen Schriftart der Zeichenfläche erhalten.

+0

Das ist ein Hack nach allem;) – SuperJMN

+0

Vielleicht, aber ich habe gesehen und oft ohne Probleme verwendet. In der Tat habe ich noch keine befriedigende Alternative gefunden. Ich wäre allerdings sehr neugierig. Ich erinnere mich, dass ich Probleme mit entweder zu kleinen oder zu großen Werten oder schlechter Leistung hatte und versuchte, dies auf andere Weise zu lösen. –

+0

Oh, und 'LineSpacing' im Sinne von Typografie könnte zusätzliche Höheneinheiten enthalten, um einen mehrzeiligen Text ästhetisch gut zu setzen. Ich bin nicht sicher, ob es Fälle gibt, in denen 'LineSpacing' in Wpf oder ähnlichem sich so verhält. Wenn Sie wirklich nur die tatsächliche Höhe des Texts ohne möglichen zusätzlichen Platz wünschen, sollte diese Lösung per Definition korrekt sein, da sie sich auf die Metriken der Glyphen konzentriert, die die aktuelle Schriftart erzeugen würde. –

Verwandte Themen