У меня есть байтовый массив, представляющий изображение.
Каждый байт представляет значение интенсивности (0-255) R, G или B определенного пикселя. Таким образом, для изображения 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 ()? Было бы лучше сделать это во время обновления ()?
EDIT:
Я пытался использовать 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 ().
Неужели должен быть более эффективный способ сделать это?