2017-02-10 21 views
11

Я хотел бы знать, как вычислить высоту данного шрифта (с его свойствами, такими как размер, вес, стиль ...) в универсальном приложении Window с использованием Win2D.Как рассчитать высоту FontFamily с Win2D (Межстрочный интервал)?

я ранее использовал CanvasTextLayout, но это требует текста работать, как в этой строке:

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

В моем случае У меня НЕ будет текста, потому что то, что я ищу, - это высота, в которой все глифы данного шрифта (с его стилем, размером, весом ...) подходят.

EDIT: Я также пробовал с классом CanvasFontFace, но, похоже, у него нет публичного конструктора.

+0

Вы ищете GetGlyphRunBounds https://microsoft.github.io/Win2D/html/Overload_Microsoft_Graphics_Canvas_Text_CanvasFontFace_GetGlyphRunBounds.htm? иначе CanvasTexFormat имеет свойство FontSize, как обычно, с семействами шрифтов –

+0

Я думаю, что GetGlyphRunBounds - это не то, что мне нужно, так как мне нужно будет указать хотя бы один глиф. Это точный эквивалент этого вопроса, но в Win2D. http://stackoverflow.com/questions/4509613/how-to-calculate-font-height-in-wpf. Пожалуйста, см. Ответ. В WPF это называется «LineSpacing». – SuperJMN

+0

Я не думаю, что вы можете получить значение по умолчанию 'LineSpacing', как в WPF. Сначала вам нужно нарисовать текст. Это ограничение Win2D. –

ответ

5

Но вы уже на правильном пути. Ты видишь. г. fg как текст. f выделяет верхнюю область, нижнюю - g, поэтому вы получаете общую высоту текста в текущем шрифте холста.

+0

Это взлом в конце концов;) – SuperJMN

+0

Возможно, но я видел и использовал это довольно часто без каких-либо проблем. На самом деле, я пока не нашел удовлетворительной альтернативы. Мне было бы очень любопытно. Я помню, что у меня были проблемы с слишком маленькими или слишком большими значениями или низкой производительностью, пытаясь решить это по-другому. –

+0

О, и 'LineSpacing' в смысле типографии может включать в себя дополнительные единицы высоты, чтобы эстетически установить многострочный текст. Я не уверен, есть ли случаи, когда 'LineSpacing' в Wpf или аналогично ведет себя таким образом. Если вы действительно хотите получить фактическую высоту текста без какого-либо дополнительного пространства, это решение должно быть правильным по определению, поскольку оно сосредоточено на метриках глифов, которые создавал текущий шрифт. –