我已经环顾了很多,我发现从Bitmap创建Texture2D的唯一方法是:
using (MemoryStream s = new MemoryStream())
{
bmp.Save(s, System.Drawing.Imaging.ImageFormat.Png);
s.Seek(0, SeekOrigin.Begin);
Texture2D tx = Texture2D.FromFile(device, s);
}
Run Code Online (Sandbox Code Playgroud)
和
Texture2D tx = new Texture2D(device, bmp.Width, bmp.Height,
0, TextureUsage.None, SurfaceFormat.Color);
tx.SetData<byte>(rgbValues, 0, rgbValues.Length, SetDataOptions.NoOverwrite);
Run Code Online (Sandbox Code Playgroud)
其中rgbValues是一个字节数组,包含32位ARGB格式的位图像素数据.
我的问题是,我可以尝试更快的方法吗?
我正在编写一个地图编辑器,它必须读取自定义格式图像(地图图块)并将它们转换为Texture2D纹理才能显示.以前版本的编辑器是一个C++实现,它首先将图像转换为位图,然后转换为使用DirectX绘制的纹理.我在这里尝试了相同的方法,但是上述两种方法都非常慢.要加载到内存中,映射所需的所有纹理都需要第一个方法~250秒,而第二个方法在合理的规格计算机上需要110秒(为了比较,C++代码需要大约5秒钟).如果有一种方法可以直接编辑纹理数据(例如使用Bitmap类'
任何帮助将非常感谢.
谢谢
我正在为使用XNA的2D游戏编写地图编辑程序.为地图所需的所有切片创建Texture2D需要太长时间.
是否有使用纹理进行XNA绘图的替代方法?
我试图为每个图块集创建一个纹理,而不是为图块集中的每个图块创建纹理,但是纹理的大小存在限制,我无法将图块集的所有图块都放入一个纹理中.
目前,程序包含内存中所有可能的纹理作为Bitmap对象.有没有办法简单地在XNA中将Bitmap对象绘制到屏幕上?我搜索过但我找不到任何相关信息.这种方法可以避免必须完全创建纹理,但是我必须直接对位图进行任何着色或效果.
我有一个用C#编写的DLL,我想将它与C#应用程序和用非托管VC++编写的应用程序一起使用.这可能吗?