Это самая быстрая вещь, которую я смог придумать:
void nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e)
{
byte[] bits = e.ImageFrame.Image.Bits;
for (int i = 0; i < bits.Length; i += 4)
{
frameBuffer[i] = bits[i + 2];
frameBuffer[i + 1] = bits[i + 1];
frameBuffer[i + 2] = bits[i];
}
canvas.SetData(frameBuffer);
}
Без задействованного кинекта я получаю частоту кадров 4200
Перемещение байтов непосредственно в texture2d без коррекции разницы в формате: 3100
Если вы передадите себе локальную переменную с помощью e.ImageFrame.Image.Bits и скопируете байты в предварительно выделенный буфер, фиксирующий байты по мере движения, я получу: 2700
Алгоритм, который я перечислил в моем первоначальном вопросе, где вы меняете местами биты и затем отправляете в texture2d примерно 750
Итак, подведем итоги изменения этого алгоритма, который увеличил частоту кадров до 2700 с 750
.