如何在运行时将图像从 Android 设备的图库映射到 Unity 应用程序中的纹理?
How to map images at runtime from an Android device's Gallery to Textures in Unity app?
我在 Unity 中构建了一个 Android 应用程序,我试图在其中迭代并显示存储在用户 android 设备中的 N 个图像。我的想法是将它们的图像读入纹理并将它们映射到我的 Unity 场景中的四边形上。
为了简化问题,我只是试图获取一个文件,我知道该文件 100% 存在于我设备的照片库中的以下目录“/storage/emulated/0/DCIM/Camera/”:
string path = "/storage/emulated/0/DCIM/Camera/20161019_142127.jpg";
WWW www = new WWW("file://" + path);
yield return www;
if (string.IsNullOrEmpty(www.error))
{
m_material.mainTexture = www.texture;
Debug.Log("No Error, texture successfully set");
}
else
{
Debug.Log("Error returned = " + www.error);
}
但我不断收到以下错误信息,提示加载文件失败:
Error returned = java.lang.NullPointerException: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[])' on a null object reference
有人能帮我理解如何正确访问这个文件,然后在这样的目录中迭代 N 个图像文件吗?
提前致谢!
或许您可以尝试使用 System.IO
中的 File.ReadAllBytes
:
Texture2D texture = new Texture2D(2, 2, TextureFormat.ARGB32, false);
byte[] fileByteData = File.ReadAllBytes(path);
texture.LoadImage(fileByteData);
纹理会在调用时自动调整大小LoadImage
。
我在 Unity 中构建了一个 Android 应用程序,我试图在其中迭代并显示存储在用户 android 设备中的 N 个图像。我的想法是将它们的图像读入纹理并将它们映射到我的 Unity 场景中的四边形上。
为了简化问题,我只是试图获取一个文件,我知道该文件 100% 存在于我设备的照片库中的以下目录“/storage/emulated/0/DCIM/Camera/”:
string path = "/storage/emulated/0/DCIM/Camera/20161019_142127.jpg";
WWW www = new WWW("file://" + path);
yield return www;
if (string.IsNullOrEmpty(www.error))
{
m_material.mainTexture = www.texture;
Debug.Log("No Error, texture successfully set");
}
else
{
Debug.Log("Error returned = " + www.error);
}
但我不断收到以下错误信息,提示加载文件失败:
Error returned = java.lang.NullPointerException: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[])' on a null object reference
有人能帮我理解如何正确访问这个文件,然后在这样的目录中迭代 N 个图像文件吗?
提前致谢!
或许您可以尝试使用 System.IO
中的 File.ReadAllBytes
:
Texture2D texture = new Texture2D(2, 2, TextureFormat.ARGB32, false);
byte[] fileByteData = File.ReadAllBytes(path);
texture.LoadImage(fileByteData);
纹理会在调用时自动调整大小LoadImage
。