我试图将字符“t”绘制到位置(0,0)的位图,然后保存位图。但是,每当我这样做时,角色将呈现在x = 8(对于大小42)。每个字体大小的偏移量可以不同,当大小为36时,偏移量为6.这似乎是与GDI相关的错误。如何查询创建此偏移量的此值?我尝试了“GetCharABCWidthsFloat”,但左右轴承将为零。我试过“GetTextMetrics”,但这没有用。我注意到这篇文章提到了它,但没有提到如何修复它http://support.microsoft.com/kb/307208
作为一种测试方法,我尝试在(-8,0)处渲染t,最后渲染为(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();
}
}
答案 0 :(得分:4)
尝试StringFormat.GenericTypographic
:
graphic.DrawString("t", font, Brushes.White, new Point(0, 0), StringFormat.GenericTypographic);