Я пытаюсь нарисовать символ "t" в растровом изображении в местоположении (0,0), а затем сохранить растровое изображение. Однако всякий раз, когда я делаю это, персонаж отображается с x = 8 (для размера 42). Смещение может быть разным для каждого размера шрифта, оно равно 6, когда размер равен 36. Это, похоже, ошибка, связанная с GDI. Как я могу запросить это значение, которое создает это смещение? Я пробовал "GetCharABCWidthsFloat", но левый и правый подшипники будут равны нулю. Я пробовал "GetTextMetrics", но это не помогает. Я заметил, что эта статья упоминает об этом, но не упоминает, как это исправить http://support.microsoft.com/kb/307208
В качестве меры тестирования я попытался отрисовать t в (-8, 0), и в итоге он рендерился в (0, 0). Кто-нибудь знает, как я могу получить это значение смещения? Я не заинтересован в том, чтобы взломать что-то вместе, но это реальное жизнеспособное решение.
GetMeasureString, GetLineSpacing не помогает.
Пример кода:
static class Program
{
static void Main(string[] args)
{
FontStyle style = FontStyle.Regular;
FontFamily fontFamily = new FontFamily("Times New Roman");
Font font = new Font("Times New Roman", 48, style);
Bitmap bitmap = new Bitmap(64, 64);
Graphics graphic = Graphics.FromImage(bitmap);
SolidBrush blackBrush = new SolidBrush(Color.Black);
graphic.FillRectangle(blackBrush, 0, 0, 64, 64);
graphic.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
SizeF size = graphic.MeasureString("t", font);
float lineSpacing = fontFamily.GetLineSpacing(FontStyle.Regular);
graphic.DrawString("t", font, Brushes.White, new Point(0, 0));
bitmap.Save("t.png");
graphic.Dispose();
}
}