基本思路是这样的:使用GDI+ 画出文字到一张bitmap上,把bitmap保存到一个流对象。在创建Texture2D的时候用此流对象创建即可。以下代码支持文字透明(因为保存到流的时候用的是PNG格式),这样就解决我们以前讨论过的中文显示的问题啦:
public static Texture2D CreateFromText(string Text,string FontName,float FontSize,Color FontColor)
{
try
{
//临时位图
System.Drawing.Bitmap tmpBmp = new System.Drawing.Bitmap(1, 1);
//创建字体
System.Drawing.Font font = new System.Drawing.Font(FontName, FontSize);
//创建图形设备
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(tmpBmp);
//评估文字大小
System.Drawing.SizeF s = g.MeasureString(Text, font);
//创建位图
System.Drawing.Bitmap Bmp = new System.Drawing.Bitmap((int)s.Width, (int)s.Height);
g = System.Drawing.Graphics.FromImage(Bmp);
//绘图
g.DrawString(Text, font, new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(FontColor.R, FontColor.G, FontColor.B)), new System.Drawing.PointF());
g.Dispose();
//保存图象
MemoryStream strm = new MemoryStream();
Bmp.Save(strm, System.Drawing.Imaging.ImageFormat.Png);
strm.Seek(0, SeekOrigin.Begin);
//从流创建纹理
return Texture2D.FromFile(SpriteX.graphics.GraphicsDevice, strm);//,(int)strm.Length);
}
catch
{
}
return null;
}
记着要加using System.IO;另外记着要在解决方案管理器的引用中加入system.drawing。
|