如何将图像中心用图形中心



我正在尝试将字符串写入文件,我想将字符串居中,以使其在中间。

我到目前为止有此代码:

    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);
    }

我希望"标题"的文本以图像为中心。我的代码目前开始从中心写下文本并转到右侧。我需要将其完美地与中心保持一致。

使用 StringFormat.Alignment

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

您的问题是2倍

  1. 使用字符串。长度产生多少个字符,而不是字符串在图形方面的宽度。例如,wwww在大多数字体中与IIII的宽度不同。

  2. 要将一个对象集中在另一个对象中,您将基本对象的大小减去另一个对象的大小,然后将剩余空间划分为两个。例如,如果您的图像为200宽,字符串为100,则您的原始公式将图像分为两个(现在是100(,然后将字符串的宽度拿走,例如100会期望

so

您最终会

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

您还应该检查您的字符串小于原始图像大小。.但这将其中心相同。

创建一种称为这样的新方法:

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);

我已经尝试过:var stringsize = graphics.measurestring(title,arialfont(.width;然后var titleLocation = new pointf(image.width/2.0f-琴弦,30f(;

您必须这样计算:

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

相关内容

  • 没有找到相关文章

最新更新