如何服用&使用Unity ARCore SDK保存图片/屏幕截图?

时间:2018-02-27 18:58:28

标签: android unity3d arcore

我找到了如何在这里本地做到这一点的答案,但我正在运行Unity。

How to take picture with camera using ARCore

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

This looks就像一个良好的开端。想法?

编辑:

使用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:Am considering using this technique。如果成功,将报告。

3 个答案:

答案 0 :(得分:1)

ARCore提供了自己的TextureReader类,它非常快,并且不会重现所提到的副作用。 TextureReader_acquireFrame

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

答案 1 :(得分:0)

您是否希望了解如何操作?如果您只想捕获屏幕截图 - 它内置于Unity中。见https://docs.unity3d.com/ScriptReference/Application.CaptureScreenshot.html

答案 2 :(得分:0)

我找到了the documentation,这使得使用原生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);
}