我环顾四周,发现从位图创建 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);
}
和
Texture2D tx = new Texture2D(device, bmp.Width, bmp.Height,
0, TextureUsage.None, SurfaceFormat.Color);
tx.SetData<byte>(rgbValues, 0, rgbValues.Length, SetDataOptions.NoOverwrite);
其中 rgbValues 是一个字节数组,其中包含 32 位 ARGB 格式的位图像素数据。
我的问题是,有没有更快的方法可以尝试?
我正在编写一个地图编辑器,它必须读取自定义格式的图像(地图图块)并将它们转换为 Texture2D 纹理以显示。以前版本的编辑器是一个 C++ 实现,它首先将图像转换为位图,然后再转换为要使用 DirectX 绘制的纹理。我在这里尝试了相同的方法,但是上述两种方法都太慢了。在合理规格的计算机上,将地图所需的所有纹理加载到内存中,第一种方法大约需要 250 秒,第二种方法大约需要 110 秒(相比之下,C++ 代码大约需要 5 秒)。如果有直接编辑纹理数据的方法(例如使用Bitmap类'
任何帮助将不胜感激。
谢谢