我正在加载一个位图以在我的 OpenGLES 2.0 应用程序中用作纹理
如果我通过Bitmapfactory加载和使用位图,那么一切正常。像这样:
加载
public void loadBitmaps{
backgrounds= BitmapFactory.decodeResource(view.getResources(), R.drawable.backgrounds, BMFOptions);
...
采用
//Apply as texture to OpenGL Quad
回收
backgrounds.recycle();
.
现在,问题…………
.
当我将位图加载为 bitmapDrawable 时,我遇到了问题(在下面的代码中解释)。像这样:
.
在类级别声明 BitmapDrawable
public class Res{
BitmapDrawable bd;
...
加载
public void loadBitmaps(){
bd = (BitmapDrawable) view.getResources().getDrawable(R.drawable.backgrounds);
backgrounds = bd.getBitmap();
...
采用
//Apply as texture to OpenGL Quad
回收
backgrounds.recycle();
这样做时,它第一次工作,但如果我然后按返回退出并重新启动应用程序,纹理不会显示,我得到的只是黑色四边形。
如果我执行以下任何操作,它可以解决问题,我想知道为什么......
- 要么从类变量中移动bd的声明,所以我正在使用:
BitmapDrawable bd = (BitmapDrawable) view.getResources().getDrawable(R.drawable.backgrounds);
- 或者在创建位图后简单地执行此操作:
bd = 空;
- 最后,我也可以,只是不回收位图,但这不是一个选项
注意 我需要以这种方式访问位图,而不是使用 BitmapFactory,因为我通过 XML 别名访问它。