gpt4 book ai didi

c# - 使用 GDI+ 绘制文本时是否可以定义精确的字体大小?

转载 作者:可可西里 更新时间:2023-11-01 13:08:50 27 4
gpt4 key购买 nike

我正在使用以下代码在位图上绘制文本:

using (Font font = new Font("Arial", 10.0f, FontStyle.Bold, GraphicsUnit.Point))
{
//draw the text
graphics.DrawString("Some text", font, Brushes.White, rect, stringFormat);
}

效果不错。这是呈现的文本:

enter image description here

我想让文字变大一点。如果我将 11 设置为字体大小,这就是我得到的:

enter image description here

对于我想要的来说它太大了。我尝试了 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);
}

最佳答案

我不知道 C# 或 .Net 库,但是,查看 this page ,似乎为 TextRenderingHint 选择 AntiAlias 应该关闭提示并打开抗锯齿。这会给你更多的中间尺寸,但可能更模糊的文本。

问题是字体提示。当字体的细节(如衬线的笔划宽度或大小)与目标设备的分辨率处于同一顺序时,简单地将设计单位缩放为设备单位可能会导致文本不平衡、不均匀,尤其是在没有抗锯齿的情况下亲切。

为避免这种情况,大多数字体都有“提示”,在分辨率有限时给出特殊情况的四舍五入规则。结果是您看到尺寸有“台阶”。

如果你想避免这些步骤,你必须关闭“提示”。这将导致光栅器忽略特殊的舍入规则,直接将设计单位缩放到设备单位。这使您可以拥有真正线性缩放的文本。权衡是文本在小尺寸下看起来可能不太好。抗锯齿可以改善对称性,但对于很多人来说,文本可能看起来很模糊。

关于c# - 使用 GDI+ 绘制文本时是否可以定义精确的字体大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10831173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com