Android Studio - Как избежатьOutOfMemoryError при повороте изображений - PullRequest
0 голосов
/ 12 ноября 2018

Как можно избежать ошибки OutOfMemoryEr, когда я вращаю изображения в самой простой форме.Я очень новичок в Android Studio и Java.Это статический метод поворота изображений

public static Bitmap rotateBitmap(Bitmap bitmap, int orientation, Context context) {

        Matrix matrix = new Matrix();
        switch (orientation) {
            case ExifInterface.ORIENTATION_NORMAL:
                return bitmap;
            case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
                matrix.setScale(-1, 1);
                break;
            case ExifInterface.ORIENTATION_ROTATE_180:
                matrix.setRotate(180);
                break;
            case ExifInterface.ORIENTATION_FLIP_VERTICAL:
                matrix.setRotate(180);
                matrix.postScale(-1, 1);
                break;
            case ExifInterface.ORIENTATION_TRANSPOSE:
                matrix.setRotate(90);
                matrix.postScale(-1, 1);
                break;
            case ExifInterface.ORIENTATION_ROTATE_90:
                matrix.setRotate(90);
                break;
            case ExifInterface.ORIENTATION_TRANSVERSE:
                matrix.setRotate(-90);
                matrix.postScale(-1, 1);
                break;
            case ExifInterface.ORIENTATION_ROTATE_270:
                matrix.setRotate(-90);
                break;
            default:
                return bitmap;
        }
        try {
            Bitmap bmRotated = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth()/2, bitmap.getHeight()/2, matrix, true);
            bitmap.recycle();
            return bmRotated;
        }
        catch (OutOfMemoryError e) {
            e.printStackTrace();
            Toast.makeText(context, "Error:"  + e, Toast.LENGTH_SHORT).show();

            return null;
        }
    }

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

yourImageView.setRotation (угол) с API> = 11

0 голосов
/ 12 ноября 2018

Я не знаю, каков ваш вариант использования, но вы можете получить простое вращение, не прибегая к матрице.Достаточно легко исчерпать память с большими растровыми изображениями.

Это, с другой стороны, будет поворачивать любое заданное изображение на произвольную величину от 0 до 360 градусов с довольно низкими издержками:

        display = (ImageView) findViewById(R.id.someview);
        int randomRot;
        Random rand = new Random();
        randomRot=rand.nextInt(360);
        display.setRotation((float) randomRot);
...