【发布时间】:2018-07-29 15:14:09
【问题描述】:
我正在尝试将字符串写入文件,并且我想将字符串居中以使其位于中间。
到目前为止我有这个代码:
var title = "My title";
var titleDescription = "My description";
using (var image =
Image.FromFile(
@"path to image")
)
{
var titleLocation = new PointF(image.Width / 2.0f, 30f);
// var titleLocation = new PointF(image.Width / 2.0f - title.Length, 30f);
var titleDescLocation = new PointF(30f, 50f);
using (var graphics = Graphics.FromImage(image))
{
using (Font arialFont = new Font("Arial", 20))
{
graphics.DrawString(title, arialFont, Brushes.Black, titleLocation);
}
using (var arialFont = new Font("Arial", 10))
{
graphics.DrawString(titleDescription, arialFont, Brushes.Black, titleDescLocation);
}
}
image.Save(Application.StartupPath + @"\new.jpg", ImageFormat.Jpeg);
}
我希望“标题”的文本在图像中居中。我的代码目前正开始从中心写入文本并向右移动。我需要它与中心完美对齐。
【问题讨论】:
-
使用 graphics.MeasureString 获取字符串的宽度,而不是字符的长度。 WWWW 与 IIII 不同
-
有道理,谢谢。我试过这个:
var stringSize = graphics.MeasureString(title, arialFont).Width;然后var titleLocation = new PointF(image.Width / 2.0f - stringSize, 30f);但它仍然没有居中。我做错了什么? -
简单数学。如果你的字符串是 100,而你的图片是 200.. 在你的代码中你刚刚做了 200/2 = 100 所以 (100 - 100) = 0.. 所以它会完全显示在左边。它应该是 50 .. 即 (200-100)/2 例如 (image.Width-stringSize)/2
-
谢谢你的解释,现在我有点傻了。感谢您的帮助和时间。如果您愿意,请随时发布答案。