一段字符串中可能既有汉字又有字母,对于汉字和字母分别采用不同的字体进行绘制直接po代码了
Bitmap bmp = new Bitmap(iWidth, iHeight);
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.FillRectangle(new SolidBrush(Color.FromArgb(0, 90, 169)), new Rectangle(0, 0, bmp.Width, bmp.Height));
if (IFYY)
{
Font arial = new System.Drawing.Font("Arial", 46F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel, ((byte)(134)));
StringFormat test = StringFormat.GenericTypographic;
SizeF size = g.MeasureString(strText, font, 1062, test);
float fX = (1062 - size.Width) / 2 + 348;
float fY = (58 - size.Height) / 2 + 960;
float rowSpace = 0f;
for (int i = 0; i < strText.Length; i++)
{
string ss = strText[i].ToString();
if (ISLetter(strText[i]))
{
SizeF sf = g.MeasureString(ss, arial);
g.DrawString(ss, arial, brushWhite, fX, fY);
if (ss == " ")
{
fX += g.MeasureString(ss, arial).Width + rowSpace;
}
else
{
fX += g.MeasureString(ss, arial, 100, test).Width + rowSpace;
}
//g.DrawString(strText[i].ToString(), arial, brushWhite, rectF, format);
}
else
{
g.DrawString(ss, font, brushWhite, fX, fY);
fX += g.MeasureString(ss, font, 100, test).Width + rowSpace;
}
//fX += rowSpace;
}
}
else
{
g.DrawString(strText, font, brushWhite, rectF, format);
}
//g.DrawString(strText, arial, brushWhite, rectF, format);
g.Dispose();
bmp.RotateFlip(RotateFlipType.Rotate180FlipX);
return bmp;
}
private static bool ISLetter(char c)
{
bool letter = false;
if (c > 127)
{
letter = false;
}
else
{
letter = true;
}
return letter;
}
需要注意的是:
StringFormat test = StringFormat.GenericTypographic;
SizeF size = g.MeasureString(strText, font, 1062, test);
Graphics.MeasureString()方法,一定要使用如图的形式,否则测算出来的字母宽度不精确