XNA中显示文字的解决办法(转自中国开发网)

本文介绍了一种将文字绘制为图片,并转换成纹理的方法。通过GDI+绘制文字到Bitmap,再将Bitmap保存为PNG格式的流对象,最后利用该流创建Texture2D。此方法支持文字透明效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本思路是这样的:使用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(11);
                
//创建字体
                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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值