如何使用图形将图像中的字符串居中?

时间:2018-02-19 11:31:03

标签: c# image graphics bitmap

我正在尝试将字符串写入文件,我想将字符串居中,以便它位于中间。

到目前为止我有这个代码:

table class="rb1" border="0">
  <tr>
    <td><input type="radio" value="1" /><label>excellent</label></td>
    <td><input type="radio" value="2" /><label>good</label></td>
    <td><input type="radio" value="3" /><label>average</label></td>
    <td><input type="radio" value="4" /><label>not relevant</label></td>
  </tr>
</table>
<table class="rb1" border="0">
  <tr>
    <td><input type="radio" value="1" /><label>excellent</label></td>
    <td><input type="radio" value="2" /><label>good</label></td>
    <td><input type="radio" value="3" /><label>average</label></td>
    <td><input type="radio" value="4" /><label>not relevant</label></td>
  </tr>
</table>
<table class="rb1" border="0">
  <tr>
    <td><input type="radio" value="1" /><label>excellent</label></td>
    <td><input type="radio" value="2" /><label>good</label></td>
    <td><input type="radio" value="3" /><label>average</label></td>
    <td><input type="radio" value="4" /><label>not relevant</label></td>
  </tr>
</table>

我想要&#34;标题&#34;以图像为中心。我的代码目前开始从中心写入文本并转到右侧。我需要它与中心完美对齐。

4 个答案:

答案 0 :(得分:1)

你的问题是2折

  1. 使用String.Length可以生成多少个字符,而不是字符串在图形方面的宽度。在大多数字体中,EG WWWW与IIII的宽度不同。

  2. 将对象置于另一个对象的中心,取出基础对象的大小,减去另一个对象的大小,并将剩余的空间分成两部分。 EG如果您的图像宽200且字符串为100,则原始公式将图像分成两部分(现在为100),然后取出字符串的宽度,例如100,所以答案为0 ..而不是50我们期待

  3. 所以

    你最终得到了

    var stringSize = graphics.MeasureString(title, arialFont).Width;
    var titleLocation = new PointF((image.Width - stringSize) / 2.0f, 30f);
    

    你还应该检查你的字符串是否小于原始图像大小..但这将使它们都以相同为中心。

答案 1 :(得分:1)

使用StringFormat.Alignment

graphics.DrawString(
    title,
    arialFont,
    Brushes.Black,
    new Rectangle(Point.Empty, new Size(image.Width, 100)),
    new StringFormat { Alignment = StringAlignment.Center });

答案 2 :(得分:-1)

创建一个名为这样的新方法:

public void CenterString(Graphics g, string text, Font font, Color color, int width, int height)
{
    SizeF sizeF = g.MeasureString(text, font);
    using (SolidBrush solidBrush = new SolidBrush(color))
    {
        g.DrawString(text, font, solidBrush, checked(new Point((int)Math.Round(unchecked(width / 2.0 - (sizeF.Width / 2f))), (int)Math.Round(unchecked(height / 2.0 - (sizeF.Height / 2f))))));
    }
}

然后你可以这样称呼它:

CenterString(graphics, text, font, color, image.Width, image.Height);

答案 3 :(得分:-1)

  

我试过这个:var stringSize = graphics.MeasureString(title,arialFont).Width;然后var titleLocation = new PointF(image.Width / 2.0f - stringSize,30f);

你必须像这样计算:

var hCenter = (image.Width / 2.0f) - (stringSize/2.0f);