繁体   English   中英

如何使用 Unity ARCore SDK 拍摄和保存图片/屏幕截图?

[英]How to take & save picture / screenshot using Unity ARCore SDK?

我在这里找到了如何在本地执行此操作的答案,但我正在运行 Unity。

如何使用 ARCore 用相机拍照

我不确定如何访问 Unity 表面渲染器线程以便能够放入这些函数。

这看起来是一个好的开始。 想法?

编辑:

使用 Texture2d ReadPixels 或 ScreenCapture.CaptureScrenshot 是不可行的,因为它们会阻塞渲染线程。 下面的代码足以阻塞线程。

StartCoroutine(TakeScreenshot());

private IEnumerator TakeScreenshot()
    {
        yield return new WaitForEndOfFrame();

        Texture2D ss = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
        ss.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        ss.Apply();

编辑 2: 我正在考虑使用这种技术 如果成功会回来报告。

在 github 上找到了这个 repo,这使得使用原生 iOS 和 Android 代码将屏幕截图保存到设备变得非常简单。 从技术上讲,您可以只使用 Texture2D 捕获代码来获取屏幕截图,但跟随 NativeGallery 调用允许您将其写入设备。 GitHub 自述文件涵盖了您需要启用哪些设置才能允许写入设备。

private void ScreenshotButtonClicked()
{
    StartCoroutine(TakeScreenshot());
}

private IEnumerator TakeScreenshot()
{
    SetUIActive(false);

    yield return new WaitForEndOfFrame();

    Texture2D ss = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
    ss.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
    ss.Apply();

    NativeGallery.SaveToGallery(ss, "Native Screenshots", DateTime.Now.ToString().Replace("/", "-"));

    SetUIActive(true);
}

private void SetUIActive(bool active)
{
    Button.gameObject.SetActive(active);
    ScaleSlider.gameObject.SetActive(active);
}

ARCore 提供了自己的 TextureReader 类,该类速度极快,并且不会重现上述副作用。 TextureReader_acquireFrame

https://github.com/google-ar/arcore-unity-sdk/blob/master/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReaderApi.cs

你想学习如何去做吗? 如果您只是想捕获屏幕截图 - 它内置于 Unity 中。 请参阅https://docs.unity3d.com/ScriptReference/Application.CaptureScreenshot.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM