Определите, насколько широко представленный символ в .NET.
Предположим, что я нарисовал символ "A" на экране с шрифтом 14 размера в Arial Regular. Есть ли способ в С# для вычисления количества пикселей в ширину?
Спасибо за все ответы. Способ, которым я обрабатываю текст, - это ESRI ArcEngine, который вызывает вызовы GDI или GDI + (я не знаю, какой) в кругу по модам с помощью динамического движка DynamicDisplay.
Ответы
Ответ 1
Это зависит от используемого механизма рендеринга..NET может использовать GDI или GDI+. Переключение может быть выполнено путем установки свойства UseCompatibleTextRendering
соответственно или вызова метода Application.SetCompatibleTextRenderingDefault
.
При использовании GDI + вы должны использовать MeasureString
:
string s = "A sample string";
SizeF size = e.Graphics.MeasureString(s, new Font("Arial", 24));
При использовании GDI (т.е. собственного рендеринга Win32) вы должны использовать класс TextRenderer
:
SizeF size = TextRenderer.MeasureText(s, new Font("Arial", 24));
Более подробная информация приведена в этой статье:
Текстовое рендеринг: создание готовых к использованию приложений с использованием сложных скриптов в элементах управления Windows Forms
Обратите внимание, что выше сказанное касается Windows Forms. В WPF вы будете использовать FormattedText
Ответ 2
Здесь часть MSDN о определение метрик шрифта. Вы можете использовать Graphics.MeasureString для измерения.
Ответ 3
Вы не говорите, как вы "визуализируете" его, но если у вас есть строка, вы можете использовать MeasureString.
Ответ 4
Graphics.MeasureString получит размер в текущих графических единицах.
Ответ 5
Не совсем, вы можете сделать только оценку. Подсказка TrueType, кернинг и наложение глифов делают измерение отдельных персонажей практически невозможным. Некоторый код:
public float GetAWidth() {
using (var font = new Font("Arial", 14)) {
SizeF size = TextRenderer.MeasureText(new string('A', 100), font);
return size.Width / 100;
}
}
Это возвращает 13.1 на моей машине. Избегайте этого.
Ответ 6
Для оконных форм вы используете Graphics.MeasureString, для WPF вы используете FormattedText.Width и FormattedText.Height.
Ответ 7
Свойство MeasureString указывает, как широко поле должно использоваться для отображения строки, что позволяет некоторым "отломам" для выступов. В частности, заявленная ширина "a" плюс сообщенная ширина "b" может быть намного больше, чем сообщенная ширина "ab". В грубом приближении я бы предположил, что если вы хотите ширину "a", вы вычитаете ширину "||", от ширины "| a |". Обратите внимание, что это будет только приблизительным, как из-за проблем округления, так и из-за того, что ширина символов зависит от контекста. Например, во многих шрифтах строка "TATATATAT" может казаться более узкой, чем "AAAATTTTT", потому что A может располагаться под T.