Android: BitmapFactory.decodeResource возвращает ноль - PullRequest
11 голосов
/ 21 сентября 2011

Я не могу понять это.У меня есть 2 Java-класса с различными характеристиками, каждый из которых вызывает BitmapFactory.decodeResource для получения того же ресурса изображения, один возвращает растровое изображение, а другой возвращает ноль.Оба класса находятся в одном пакете.

Вот класс, который работает, он вызывает BitmapFactory.decodeResource, который возвращает растровое изображение.Я включил только соответствующий код.

package advoworks.test;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MainScreen extends SurfaceView implements SurfaceHolder.Callback {

    private static final String TAG = MainScreen.class.getSimpleName();

    public MainScreen(Context context) {
        super(context);

        Bitmap bitmap;
        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.droid_1);

        //adding the callback (this) to the surface holder to intercept events;
        getHolder().addCallback(this);

        // make the GamePanel focusable so it can handle events
        setFocusable(true);

    }
}

Вот класс, который не работает.BitmapFactory.decodeResource возвращает значение NULL при отладке.Я включил только тот код, который мне показался актуальным.

package advoworks.test;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.Log;

public class Segment {

    private int x;
    private int y;
    private Bitmap bitmap;

    public Segment(int x, int y) {
        Log.d(TAG, "Creating Segment");
        try {
            this.bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.droid_1);
        } catch (Exception e) {
            Log.d(TAG,"Error is " + e);
        }   
        this.x = x;
        this.y = y;
        Log.d(TAG, "Created Segment");
    }
}

Кто-нибудь знает что-нибудь?

Ответы [ 3 ]

6 голосов
/ 19 августа 2015

Проверьте разрешение вашего изображения, если оно слишком большое, BitmapFactory.decodeResource просто вернет ноль (без исключения)

4 голосов
/ 21 сентября 2011

getResources() - это метод класса Context, и вы не используете контекст в своем классе сегмента.Как это работает.Вы должны позвонить getApplicationContext().getResources()

Вы должны передать контекст конструктору Segment.

public Segment(Context context, int x, int y) {
    ....
    bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.droid_1);
    ....
}
1 голос
/ 17 июля 2018

убедитесь, что ваше изображение не в папке drawable-v24 , переместите его в папку drawable .

, это сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...