У меня есть байтовый массив, представляющий изображение.
Каждый байт представляет значение интенсивности (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 ()? Было бы лучше сделать это во время update ()?
РЕДАКТИРОВАТЬ:
Я попытался использовать setData () в Texture2D для создания новой текстуры каждый раз, когда мой байтовый массив обновляется (обычно один раз в кадре). Теперь частота кадров ниже 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 ().
Неужто должен быть более эффективный способ сделать это?