[英]How to take & save picture / screenshot using Unity ARCore SDK?
我在这里找到了如何在本地执行此操作的答案,但我正在运行 Unity。
我不确定如何访问 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
你想学习如何去做吗? 如果您只是想捕获屏幕截图 - 它内置于 Unity 中。 请参阅https://docs.unity3d.com/ScriptReference/Application.CaptureScreenshot.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.