Я заметил странное поведение Graphics.MeasureString при разных разрешениях.
Для разрешения по умолчанию (96x96) существует линейная зависимость между различными размерами шрифтов, которые я тестировал.
Однако, если я увеличу его до 512 x 512, линейное соотношение исчезнет, и при использовании строки меры произойдет нечто действительно странное. (См. 4 графика ниже)
Если я оставлю разрешение на уровне по умолчанию для графического объекта и измерим размер шрифта, вот соотношение между размером шрифта и шириной строки:
Графический объект, разрешение по умолчанию (96):
Размер шрифта (ось X), ШИРИНА конкретной строки (ось Y)
Размер шрифта (ось X), высота конкретной строки (ось Y)
Однако, если я изменю разрешение
Графический объект, разрешение 512:
Размер шрифта (ось X), ШИРИНА конкретной строки (ось Y)
Размер шрифта (ось X), высота конкретной строки (ось Y)
Кто-нибудь знает, почему это может происходить?
Спасибо.
Следует отметить, что я использую .NET 4 (полный профиль)
Код, используемый для создания графиков (изменение разрешения для каждого типа):
string str = "6 CN-3 Tie EomgVeo405- 2ss>era09rni IBne 20iopv Atdrsn - Ng72";
SizeF sizef = new SizeF(855, 14.000001f);
StringFormat stringFormat = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Near,
Trimming = StringTrimming.None,
FormatFlags = StringFormatFlags.NoClip,
};
Bitmap b = new Bitmap(901, 401);
//b.SetResolution(512, 512);
Graphics g = Graphics.FromImage(b);
for (float x = origFont.Size; x >= 0.5; x -= 0.1f)
{
var data = g.MeasureString(str, new Font("Microsoft Sans Serif", x), sizef, stringFormat);
Console.WriteLine(x + "\t" + data.Width + "\t" + data.Height);
}