我正在使用以下代码在位图上绘制文本:
using (Font font = new Font("Arial", 10.0f, FontStyle.Bold, GraphicsUnit.Point))
{
//draw the text
graphics.DrawString("Some text", font, Brushes.White, rect, stringFormat);
}
效果很好。这是渲染文本:
我想让文字更大一些。如果我将11设置为字体大小,这就是我得到的:
它太大了我想要的东西。 我尝试了10.25,10.5等,但结果与10相同。
我也尝试将GraphicsUnit
设置为Pixel
但行为相同(无法设置自定义字体大小)。
这是我的问题:
使用GDI +(C#)绘制文字时,是否有可能“微调”渲染文字的大小?
编辑: 更完整的代码段(根据要求):
using (Bitmap bitmap = new Bitmap(width, height))
using (Graphics graphics = Graphics.FromImage(bitmap))
using (Font font = new Font("Arial", 10.0f, FontStyle.Bold, GraphicsUnit.Point))
{
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
Rectangle rect = new Rectangle(0, 0, width, height);
//method 1
StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
graphics.DrawString("Some text", font, Brushes.White, rect, stringFormat);
//method 2
TextFormatFlags flags = TextFormatFlags.HorizontalCenter |
TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;
TextRenderer.DrawText(graphics, "Some text", font, rect, Color.White, flags);
bitmap.Save(stream, ImageFormat.Png);
}
答案 0 :(得分:4)
Graphics.DrawString()具有严重且无法解决的精度问题,仅适用于打印机等高分辨率设备。
请改用.NET 2.0 TextRenderer.DrawText()方法。
答案 1 :(得分:4)
我不知道C#或.Net库,但是,查看this page,似乎选择AntiAlias
TextRenderingHint
应该关闭提示并启用抗锯齿功能。这将为您提供更多中间尺寸,但可能更模糊。
问题是字体提示。当字体的细节(如笔划宽度或衬线的大小)与目标设备的分辨率处于相同的顺序时,简单地将设计单元缩放到设备单元会导致不平衡的,不均匀的文本,尤其是当没有任何抗锯齿时样。
为了避免这种情况,大多数字体都有“提示”,当分辨率有限时,它会给出四舍五入的特殊情况规则。结果就是你看到了“步数”。
如果您想避开这些步骤,则必须关闭“提示”。这将导致光栅化器忽略特殊的舍入规则,并直接将设计单位缩放到设备单元。这使您可以拥有真正的线性缩放文本。权衡的是文本在小尺寸上可能看起来不太好。抗锯齿可以改善对称性,但是对于许多人来说,文本可能看起来很模糊。