Я пытаюсь использовать OpenCV с Unity для обработки изображений, и я пытаюсь сделать передачу данных между OpenCV и кодом Unity максимально эффективной.
В настоящее время я могу создать новый byte[]
в C #, затем загрузить изображение в эти байты в OpenCV, а затем использовать texture.LoadRawTextureData(array)
и texture.Apply()
, чтобы отобразить эту текстуру в Unity.
Однако в документации Unity рекомендуется использовать texture.GetRawTextureData()
для получения ссылки на NativeArray (версия функции, которая возвращает byte[]
, создает копию необработанных данных), а затем записывать данные непосредственно в этот буфер (+ call Apply()
).
К сожалению, документация по NativeArrays довольно скудна - как именно NativeArrays выглядит в памяти?У них есть функция ToArray()
, но это снова делает копию данных.Мне нужен массив byte [], который может быть RGB24 или RGBA32 (RGBA кажется предпочтительным, поскольку, несмотря на то, что он неэффективен в отношении памяти, если текстура непрозрачна, современные графические процессоры, по-видимому, не поддерживают RGB24).
Есть ли способ передать указатель на начало буфера в текстуре без копирования и вызова LoadRawTextureData()
?Или данные в текстуре находятся в совершенно другом формате?