LoadRawTextureData()数据不足,在Unity中提供错误

时间:2019-03-14 09:35:44

标签: c# unity3d arcore texture2d

我正在使用ARcore开发项目。

我需要一个现实世界的屏幕,该屏幕以前在ARcore相机上可见,以前使用的是擦除UI和捕获的方法。

但是它是如此之慢,以至于我在Arcore API中找到了Frame.CameraImage.Texture

它在Unity编辑器环境中正常工作。

但是,如果您将其构建在手机上并签出,则Texture为null。

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

是什么原因?也许是CPU问题?

然后我尝试执行其他功能。

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 :(得分:0)

R8只是红色数据。 您可以使用TextureFormat.RGBA32并按以下方式设置缓冲区:

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