我正在使用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;
}
}
}
但是如果我更改纹理格式,它将显示出来。
private TextureFormat _format = TextureFormat.R8;
这是可行的,但是我不想显示红色图像,我想使用RGB颜色
我该怎么办?
答案 0 :(得分:0)
R8
只是红色数据。
您可以使用TextureFormat.RGBA32
并按以下方式设置缓冲区:
IntPtr _buff = Marshal.AllocHGlobal(width * height*4);