Получение ошибки при вызове метода

Я пытаюсь создать приложение, в котором, когда приложение открыто, оно будет показывать другое изображение на заднем плане, но когда я пытался вызвать метод. Я получаю ошибку. Я делаю размытое изображение для API ниже 16, это то, что я использовал

public class MainActivity extends AppCompatActivity {
int roll[]={R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,R.drawable.img5,R.drawable.img6};
int number;
private final Paint mPaint = new Paint();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Random num= new Random();
number=num.nextInt(6);
    ImageView img =(ImageView)findViewById(R.id.imageView);

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),roll[number]);
    Bitmap blurredBitmap = blur(""+roll[number]);
    img.setImageBitmap(blurredBitmap);
}


public Bitmap blur(final String pathToBitmap) {
    final BitmapFactory.Options options = new BitmapFactory.Options();
    final Bitmap normalOne = BitmapFactory.decodeFile(pathToBitmap, options);
    final Bitmap resultBitmap = Bitmap.createBitmap(options.outWidth, options.outHeight, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(resultBitmap);
    mPaint.setAlpha(180);
    canvas.drawBitmap(normalOne, 0, 0, mPaint);
    int blurRadius = 12;
    for (int row = -blurRadius; row < blurRadius; row += 2) {
        for (int col = -blurRadius; col < blurRadius; col += 2) {
            if (col * col + row * row <= blurRadius * blurRadius) {
                mPaint.setAlpha((blurRadius * blurRadius) / ((col * col + row * row) + 1) * 2);
                canvas.drawBitmap(normalOne, row, col, mPaint);
            }
        }
    }
    normalOne.recycle();
    return resultBitmap;
}
}

где я делаю не так? Я использую этот метод, потому что в Google большая часть эффекта размытия не работает в API<16. Просто хочу узнать, что я делаю не так в коде.

1 ответ

Решение

Когда вы пытаетесь использовать этот код:

Растровое изображение blurredBitmap = blur(""+roll[number]);

Этот путь ("" + roll [число]) не соответствует абсолютному пути, поскольку доступные для рисования ресурсы добавляются в двоичный файл во время выполнения, поэтому не могут быть доступны по пути. Попробуй использовать

BitmapFactory.decodeResource (GetResources (), ResourceId);

 public Bitmap blur(int resourceId) {
        final Bitmap normalOne = BitmapFactory.decodeResource(getResources(),resourceId);
        final Bitmap resultBitmap = Bitmap.createBitmap(normalOne.getWidth(), normalOne.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(resultBitmap);
        mPaint.setAlpha(180);
        canvas.drawBitmap(normalOne, 0, 0, mPaint);
        int blurRadius = 12;
        for (int row = -blurRadius; row < blurRadius; row += 2) {
            for (int col = -blurRadius; col < blurRadius; col += 2) {
                if (col * col + row * row <= blurRadius * blurRadius) {
                    mPaint.setAlpha((blurRadius * blurRadius) / ((col * col + row * row) + 1) * 2);
                    canvas.drawBitmap(normalOne, row, col, mPaint);
                }
            }
        }
        normalOne.recycle();
        return resultBitmap;
    }
Другие вопросы по тегам