如何在Unity中将捕获的照片保存到Android图库?

5

我有一个有效的脚本,可以使用AR相机拍照并将其保存在Android的数据文件中,如下所示:

    screenShotName = "Dorot" + System.DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".png";
    File.WriteAllBytes(Application.persistentDataPath + "/" + screenShotName, screenshot.EncodeToPNG());
    GameObject.Find("MainCanvas").GetComponent<Canvas>().enabled = true;

我该如何更改persistentDataPath,以便正确地获取Android图库的路径?谢谢。

你不能将图片保存到相册中,因为相册应用程序只是一个应用程序,而不是存储位置。相册应用程序只显示设备上的图像。此外,您现在使用的完整路径未被提及。 - greenapps
谢谢,我明白了。我手机上保存图像的当前路径是:My files\ Internal storage\ Android\ data\ com.CompanyName.AppName\ files。在Windows上,图像保存在AppData文件夹中。 - Montacer Dkhilali
抱歉,但这是 Android 设备上不存在的路径。请在您的设备上使用更好的文件浏览器应用程序查找真实路径。 - greenapps
2个回答

6
我使用Unity原生相册插件来做完全相同的事情。
这是我的代码。
public class ScreenshotTaker : MonoBehaviour
{
    public bool takingScreenshot = false;

    public void CaptureScreenshot()
    {
        StartCoroutine(TakeScreenshotAndSave());
    }

    private IEnumerator TakeScreenshotAndSave()
    {
        takingScreenshot = true;
        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();

        // Save the screenshot to Gallery/Photos
        string name = string.Format("{0}_Capture{1}_{2}.png", Application.productName, "{0}", System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"));
        Debug.Log("Permission result: " + NativeGallery.SaveImageToGallery(ss, Application.productName + " Captures", name));
        takingScreenshot = false;
    }
}

0

你可以像JackMini36在他的回答中所说的那样使用插件来完成。或者你可以编写自己的代码来实现。

但是具有挑战性的部分将是使其跨平台以及在Android设备上的权限问题。这里有一篇很好的文章,你可以学习不同的方法在Unity应用程序中保存屏幕截图到相册。 http://unitydevelopers.blogspot.com/2018/09/save-screenshot-in-unity3d.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接