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

问题描述 投票:1回答:3

我找到了如何在这里本地做到这一点但我正在运行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。如果成功,将报告回来。

android unity3d arcore
3个回答
1
投票

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

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


0
投票

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


0
投票

我找到了this repo on github,这使得使用原生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);
}
© www.soinside.com 2019 - 2024. All rights reserved.