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,
在我的应用程序中,我生成了一个带有可变字符串的 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,