C# - 从变量字符串调整位图大小

C# - Resize Bitmap from a variable String

在我的应用程序中,我生成了一个带有可变字符串的 Bitmap

这是我的函数:

public void Image(String text, String font, int size)
{    
    Font font = new Font(font, size);
    float res = ((font.SizeInPoints * text.Length) / 72) * 96;

    using (Bitmap img = new Bitmap((int)res, font.Height))
    {
        Graphics g = Graphics.FromImage(img);

        SolidBrush drawBrush = new SolidBrush(Color.Black);

        g.DrawString(text, font, drawBrush, 1, 0);

        String directory = AppDomain.CurrentDomain.BaseDirectory + "Content\Images\Signature\";
        string outputFileName = directory + "sign.png";

        img.Save(outputFileName, ImageFormat.Png);
    }
}

我希望图像的宽度与该位图中打印的字符串的宽度完全匹配。

如您所见,我尝试用字体的磅值来计算宽度。
问题是打印的每个字母都有不同的宽度,所以在创建 Bitmap.

之前我无法获得尺寸

另外,我什至不知道如何检索打印字符串的实际大小...

有人知道吗?

使用Graphics.MeasureString函数。它需要一个字符串和一种字体,returns 渲染文本的大小作为 SizeF。还有一些额外的重载可以获取格式信息,其中一个重载 SizeF 表示换行的最大宽度。

可在此处找到详细信息:https://msdn.microsoft.com/en-us/library/6xe5hazb(v=vs.110).aspx

// Set up string.
string measureString = "Measure String";
Font stringFont = new Font("Arial", 16);

// Set maximum layout size.
SizeF layoutSize = new SizeF(100.0F, 200.0F);

// Set string format.
StringFormat newStringFormat = new StringFormat();
newStringFormat.FormatFlags = StringFormatFlags.DirectionVertical;

// Measure string.
SizeF stringSize = new SizeF();
stringSize = e.Graphics.MeasureString(measureString, stringFont, layoutSize, newStringFormat);

// Draw rectangle representing size of string.
e.Graphics.DrawRectangle(new Pen(Color.Red, 1), 0.0F, 0.0F, stringSize.Width, stringSize.Height);

// Draw string to screen.
e.Graphics.DrawString(measureString, stringFont, Brushes.Black, new PointF(0,