C#DrawString()字母之间的空格

时间:2018-06-18 20:14:52

标签: c# system.drawing

我正在尝试以编程方式在图像中心绘制日期。

到目前为止,这有效:

Font font = new Font("Arial", fontsize);
string[] datestrings = new string[] { dt.ToString("MMMM").ToUpper(), dt.Day.ToString(), dt.Year.ToString() };
for(int i = 0; i < 3; i++)
{
    float textWidth = (int)datemarkGraphics.MeasureString(datestrings[i], font).Width;

    textWidth += (datestrings[i].Length - 1) * spaceBetween;
    float textX = (datemarkImage.Width - textWidth) / 2F;
    float textY = i * (fontsize + 2F);
    datemarkGraphics.DrawString(datestrings[i], font, Brushes.Black, textX, textY);

}

然而,这导致字母有点太靠近我的喜好。在我的研究中,我发现在本地执行此操作的唯一方法是单独绘制每个字母,但这会使字母间隔太远:

Font font = new Font("Arial", fontsize);
string[] datestrings = new string[] { dt.ToString("MMMM").ToUpper(), dt.Day.ToString(), dt.Year.ToString() };
for(int i = 0; i < 3; i++)
{
    float textWidth = (int)datemarkGraphics.MeasureString(datestrings[i], font).Width;

    textWidth += (datestrings[i].Length - 1) * spaceBetween;
    float textX = (datemarkImage.Width - textWidth) / 2F;
    float textY = i * (fontsize + 2F);
    for (int j = 0; j < datestrings[i].Length; j++) 
    {
        string charToDraw = datestrings[i][j].ToString();
        datemarkGraphics.DrawString(charToDraw, font, Brushes.Black, textX, textY);
        textX += datemarkGraphics.MeasureString(charToDraw, font).Width + spaceBetween;
    }
}

注意:

除数组索引外的所有数值变量都是浮点数。

datemarkImageWidth = 228

spaceBetween = 0.3(虽然改变这似乎不会改变我所期望的规模上的sapcing,而负数仍会导致每个字母之间有额外的空间)

fontsize = 28

我在这里做错了什么?我唯一能想到的是MeasureString()函数没有像我预期的那样工作,但我不确定如何。

编辑:这不是链接的副本,它也在询问如何执行此操作,但他们没有说明他们是如何单独绘制每个字母的。

0 个答案:

没有答案