如何使用 Unity ARCore SDK 拍摄和保存图片/屏幕截图?
How to take & save picture / screenshot using Unity ARCore SDK?
我在这里找到了本机操作的答案,但我 运行 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。如果成功会回来报告。
你想学习如何做吗?如果您只是想截取屏幕截图 - 它内置于 Unity 中。参见 https://docs.unity3d.com/ScriptReference/Application.CaptureScreenshot.html
我发现 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);
}
ARCore 提供了自己的 TextureReader class,速度非常快,并且不会重现提到的副作用。 TextureReader_acquireFrame
我在这里找到了本机操作的答案,但我 运行 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。如果成功会回来报告。
你想学习如何做吗?如果您只是想截取屏幕截图 - 它内置于 Unity 中。参见 https://docs.unity3d.com/ScriptReference/Application.CaptureScreenshot.html
我发现 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);
}
ARCore 提供了自己的 TextureReader class,速度非常快,并且不会重现提到的副作用。 TextureReader_acquireFrame