ftm
ftm

Reputation: 385

Android Bitmap becomes null

In my drawable object class, I have a member variable that stores a bitmap which gets assigned the constructor, by the time the render function is called, the bitmap has become null and I can't work out why.

Class members and constructor:

public class MyDrawableObject {
    private int mFileLocation;
    private final int mId;
    private Context mContext;
    private Bitmap bmp;

    private int X;
    private int Y;
    private int W;
    private int H;

    public static List<MyDrawableObject> ObjectList = new ArrayList<MyDrawableObject>();

    public MyDrawableObject(int fileloc, Context con) {
        mFileLocation = fileloc;
        mId = ObjectList.size();
        mContext = con;

        ObjectList.add(this);

        Bitmap bmp = BitmapFactory.decodeResource(mContext.getResources(), mFileLocation);

        // Store width and height
        W = bmp.getWidth();
        H = bmp.getHeight();

        Log.d("DrawableObject", "Width: " + W + " Height: " + H);
        Log.d("DrawableObject", "Object Added to list, ID: " + mId);
        Log.d("DrawableObject", "ID: " + mId + " Filelocation: " + mFileLocation);
    }

Function that error occurs in

public void SetupImage(Context mContext) {
    // Create our UV coordinates.
    float[] uvs = new float[] {
            0.0f, 0.0f,
            0.0f, 1.0f,
            1.0f, 1.0f,
            1.0f, 0.0f
    };

    // The texture buffer
    ByteBuffer bb = ByteBuffer.allocateDirect(uvs.length * 4);
    bb.order(ByteOrder.nativeOrder());
    uvBuffer = bb.asFloatBuffer();
    uvBuffer.put(uvs);
    uvBuffer.position(0);

    // Generate Textures, if more needed, alter these numbers.
    int[] texturenames = new int[1];
    GLES20.glGenTextures(1, texturenames, 0);

    // Bind texture to texture name
    GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texturenames[0]);

    // Set filtering
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);

    if(bmp == null) {
        Log.d("DrawableObject", "NULL BITMAP");
    } else {
        Log.d("DrawableObject", "NON NULL");
    }

    // Load the bitmap into the bound texture.
    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
}

When I run this, I get my "NULL BITMAP" message in my logs and the app crashes. I don't modify or access bmp or in any other place other than the two examples above in the constructor and the SetupImage function above.

Any help greatly appreciated, thanks.

Upvotes: 0

Views: 965

Answers (1)

Sanjeev
Sanjeev

Reputation: 9946

Culprit is

        Bitmap bmp =      BitmapFactory.decodeResource(mContext.getResources(), mFileLocation);

you are overriding bmp declaration, this is resulting in a local variable named bmp and will not assign to your class variable. You should change it to

        bmp = BitmapFactory.decodeResource(mContext.getResources(), mFileLocation);

Hope this helps.

Upvotes: 3

Related Questions