Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从OpenGL的“资源”文件夹加载纹理_Java_Android_Opengl Es - Fatal编程技术网

Java 从OpenGL的“资源”文件夹加载纹理

Java 从OpenGL的“资源”文件夹加载纹理,java,android,opengl-es,Java,Android,Opengl Es,我知道与这个问题相关的问题很多,但似乎很少有针对openGL的问题 我试图将一些PNG文件从assets文件夹加载到位图中,但由于某些原因,返回的位图为null,这反过来会在此处引发NullPointerException: GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); 我用于从资产文件夹加载图像的代码: public static Bitmap getBitmapFromAsset(AssetManager mgr, Stri

我知道与这个问题相关的问题很多,但似乎很少有针对openGL的问题

我试图将一些PNG文件从assets文件夹加载到位图中,但由于某些原因,返回的位图为null,这反过来会在此处引发NullPointerException:

GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
我用于从资产文件夹加载图像的代码:

public static Bitmap getBitmapFromAsset(AssetManager mgr, String path)
{
    InputStream is = null;
    Bitmap bitmap = null;
    try {
        is = mgr.open(path);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inScaled = false;
        bitmap = BitmapFactory.decodeStream(is, null, options);
    }
    catch (final IOException e)
    {
        bitmap = null;
        Log.e(TAG, "FAILED TO get getBitmapFromAsset: " + e.getMessage());
    }
    finally
    {
       if (is != null)
       {
            try 
            {
                 is.close();
            } 
            catch (IOException ignored) 
            {
            }
        }
    }

    return bitmap;
}
我尝试过几种不同的方法,例如不使用BitmapFactory.Options,但不管我得到的是NullPointerException,所以我猜我应该做另一个过程


另外,我可以从res/raw文件夹中加载它们,但我不能有子目录来组织我的资产。

好的,我刚刚意识到我的资产文件夹出于某种原因位于res文件夹下。我只是把它放在主文件夹app/main/assets下,它就工作了。
*脸红

哪部分出现故障?
AssetManager
上的
open()
方法,还是
decodeStream()
?您应该能够通过在调试器中单步执行它来判断。我刚刚分离了调用,而失败的肯定是open()调用。字符串路径假定Android将从资产文件夹开始查看。