#c# #c #text #typography
#c# #c #текст #типография
Вопрос:
При работе со шрифтами есть ли способ выяснить, каким должен быть пробел между двумя символами, если бы это было «1 2»?
Если это известно в C или C #, я не возражаю. Если оно на C , я его переделаю, если на C #, я сохраню его в файл и загружу на C . Я попытался взглянуть на текстовую структуру, но ее там не было.
Комментарии:
1. Я не уверен, о чем вы спрашиваете, вы спрашиваете, как вычислить, сколько пикселей занимает пробел, на основе шрифта, которым он напечатан?
2. Вы имеете в виду графическое расстояние между символами или пустой символ, называемый пробелом?
Ответ №1:
Графика.MeasureCharacterRanges дает довольно хорошие результаты при измерении отдельных символов (четных пробелов) путем добавления символа нулевой ширины u200D
до и после. Однако он игнорирует все элементы кернинга, я думаю, из-за соединителей нулевой ширины.
Вам нужна куча дополнительных параметров, но для меня a new StringFormat(StringFormat.GenericTypographic)
и Rectangle.Empty
вполне подошли.
Он возвращает массив хороших границ с плавающей запятой для каждого символа в строке.
Ответ №2:
Если вам нужны показатели того, как будет отображаться текст, вам необходимо предоставить текст. Вам нужно будет указать символ пробела ascii. Современные системы, использующие кернинг для регулировки интервалов и придания тексту более привлекательного вида.
Ответ №3:
Можете ли вы использовать графику.MeasureString() и передача шрифта и " "
строки с пробелом?
Комментарии:
1. Этот метод очень неточен для отдельных символов, и я думаю, что он возвращает ноль для одного пробела.
Ответ №4:
Вот пример на C # с использованием обработчика событий Paint в форме:
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
float widthWithSpace = e.Graphics.MeasureString("1 2", new Font("Arial", 12)).Width;
float widthWithoutSpace = e.Graphics.MeasureString("12", new Font("Arial", 12)).Width;
float spaceWidthInPixels = widthWithSpace - widthWithoutSpace ;
}