【发布时间】:2011-02-21 14:59:53
【问题描述】:
我环顾四周,发现从位图创建 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 类的 LockBits 方法),那么我将能够将自定义格式的图像直接转换为 Texture2D,并有望节省处理时间。
非常感谢任何帮助。
谢谢
【问题讨论】: