我可以翻译这段内容。它与 IT 技术有关。
我有一个表示图像的字节数组。
每个字节表示特定像素的 R、G 或 B 的强度值(0-255)。因此,对于 640x480 图像,字节数组的大小为 640*480*3(每个像素都有 3 个表示它的字节)。
字节的顺序是按像素排列的。例如:
我有一个表示图像的字节数组。
每个字节表示特定像素的 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()期间执行它是否更好?
编辑:
我尝试使用setData()在Texture2D上创建一个新纹理,每当我的字节数组更新时(通常一帧),但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()周期调用。
肯定有更有效率的方法吧?