我有一个代表图像的字节数组。
每个字节表示特定像素的 R、G 或 B 的强度值 (0-255)。因此,对于 640x480 图像,字节数组的大小为 640*480*3(每个像素有 3 个字节代表它)。
字节按像素顺序排列。例如:
image[0] = the R value of x=0 y=0
image[1] = the G value of x=0 y=0
image[2] = the B value of x=0 y=0
image[3] = the R value of x=1 y=0
等等。
我想知道在 XNA 中将其绘制到屏幕上的最有效方法是什么?
我的想法是做以下事情。
- 创建一个新的 Texture2d 对象
- 在 draw() 方法中,循环遍历字节数组并设置 Texture2D 对象上的值
- 将这个填充的对象绘制到屏幕上。
这是最快的方法吗?如果效率更高,我还可以以不同的顺序/格式存储字节数组。在 draw() 方法期间进行循环有什么缺点吗?在 update() 期间这样做会更好吗?
编辑:
我试图在 Texture2D 上使用 setData() 以便在每次我的字节数组更新(通常是一帧一次)时创建一个新纹理。fps 现在低于 15,而之前为 60。代码如下:
public static Texture2D getImageFrame(GraphicsDevice gd)
{
if (cameraTex == null)
{
cameraTex = new Texture2D(gd, 640, 480, false, SurfaceFormat.Color);
}
cameraTex.SetData(imageFrame);
return cameraTex;
}
这被称为每个 draw() 循环。
当然必须有一种更有效的方法来做到这一点?