如何在运行时将图像从Android设备的图库映射到Unity应用程序中的纹理?

时间:2016-10-24 23:55:59

标签: android image unity3d textures

我有一个在Unity中构建的Android应用程序,我正在尝试迭代并显示存储在用户的Android设备中的N个图像。我们的想法是将他们的图像读入Textures并将它们映射到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个图像文件吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

也许您可以尝试使用File.ReadAllBytes中的System.IO

Texture2D texture = new Texture2D(2, 2, TextureFormat.ARGB32, false);
byte[] fileByteData = File.ReadAllBytes(path);
texture.LoadImage(fileByteData);

调用LoadImage时,纹理会自动调整大小。