我找到了如何在这里本地做到这一点的答案,但我正在运行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。如果成功,将报告。
答案 0 :(得分:1)
ARCore提供了自己的TextureReader类,它非常快,并且不会重现所提到的副作用。 TextureReader_acquireFrame
答案 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);
}