我正在尝试将字符串写入文件,我想将字符串居中,以便它位于中间。
到目前为止我有这个代码:
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;以图像为中心。我的代码目前开始从中心写入文本并转到右侧。我需要它与中心完美对齐。
答案 0 :(得分:1)
你的问题是2折
使用String.Length可以生成多少个字符,而不是字符串在图形方面的宽度。在大多数字体中,EG WWWW与IIII的宽度不同。
将对象置于另一个对象的中心,取出基础对象的大小,减去另一个对象的大小,并将剩余的空间分成两部分。 EG如果您的图像宽200且字符串为100,则原始公式将图像分成两部分(现在为100),然后取出字符串的宽度,例如100,所以答案为0 ..而不是50我们期待
所以
你最终得到了
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);