Есть ли у XNA формат поверхности BGRA / BGRX? - PullRequest
1 голос
/ 13 сентября 2011

У меня есть видеопоток с Kinect.Это данные упакованы в 32-битном формате BGRX.Я хотел бы переместить эти данные непосредственно в Texture2d, но я не могу найти соответствующий SurfaceFormat.Самое близкое, что я могу найти, это SurfaceFormat.Color, который выглядит как 32-битный RGBX.

Предполагается, что нет совместимого формата.Какой самый быстрый способ преобразовать и передать данные в текстуру 2d

Я думал, что что-то вроде этого было бы хорошо, но, похоже, замедляет частоту кадров:

Редактировать: я изменилАлгоритм немного, и теперь он работает прилично.

    void nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e)
    {
        byte x;
        for (int i = 0; i < e.ImageFrame.Image.Bits.Length; i += 4)
        {
            x = e.ImageFrame.Image.Bits[i];
            e.ImageFrame.Image.Bits[i] = e.ImageFrame.Image.Bits[i + 2];
            e.ImageFrame.Image.Bits[i + 2] = x;
        }
        canvas.SetData(e.ImageFrame.Image.Bits);
    }

1 Ответ

0 голосов
/ 14 сентября 2011

Это самая быстрая вещь, которую я смог придумать:

    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

.
...