LoadRawTextureData () недостаточно данных при условии ошибки в Unity - PullRequest
1 голос
/ 14 марта 2019

Я работаю над проектом с использованием ARcore.

Мне нужен экран реального мира, который виден на камере ARcore, ранее использовался метод стирания пользовательского интерфейса и захвата.

Но это было так медленно, что я нашел Frame.CameraImage.Texture в Arcore API

Он работал нормально в среде редактора Unity.

Но если вы построите его на своем телефоне и проверите его, текстура будет нулевой.

Texture2D snap = (Texture2D)Frame.CameraImage.Texture;

В чем причина? может проблема с процессором?

и я попытался выполнить другую функцию.

public class TestFrameCamera : MonoBehaviour
{
    private Texture2D _texture;
    private TextureFormat _format = TextureFormat.RGBA32;

    // Use this for initialization
    void Start()
    {
        _texture = new Texture2D(Screen.width, Screen.height, _format, false, false);
    }

    // Update is called once per frame
    void Update()
    {

        using (var image = Frame.CameraImage.AcquireCameraImageBytes())
        {
            if (!image.IsAvailable) return;

            int size = image.Width * image.Height;
            byte[] yBuff = new byte[size];
            System.Runtime.InteropServices.Marshal.Copy(image.Y, yBuff, 0, size);

            _texture.LoadRawTextureData(yBuff);
            _texture.Apply();

            this.GetComponent<RawImage>().texture = _texture;

        }
    }
}

enter image description here

Но если я изменю формат текстуры, он выйдет.

private TextureFormat _format = TextureFormat.R8;

это работа, но я не хочу красного цвета изображения, я хочу RGB цвета

что мне делать?

enter image description here

1 Ответ

0 голосов
/ 01 апреля 2019

R8 Просто красные данные.Вы можете использовать TextureFormat.RGBA32 и установить буфер следующим образом:

IntPtr _buff = Marshal.AllocHGlobal(width * height*4);
...