Недостаточно памяти при создании растровых изображений на устройстве

У меня проблемы с изображениями высокого разрешения.

Я использую папку nodpi-drawable для изображений 1280x720 и использую этот код для масштабирования.

public static Drawable scaleDrawable(Drawable d, int width, Activity cxt)
    {
        BitmapDrawable bd = (BitmapDrawable)d;

        double oldWidth = bd.getBitmap().getWidth();
        double scaleFactor = width / oldWidth;

        int newHeight = (int) (d.getIntrinsicHeight() * scaleFactor);
        int newWidth = (int) (oldWidth * scaleFactor);

        Drawable drawable = new BitmapDrawable(cxt.getResources(),MainScreen.getResizedBitmap(bd.getBitmap(),newHeight,newWidth));

        BitmapDrawable bd2 = (BitmapDrawable)drawable;

        return  drawable;
    }

    public static Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { 

        int width = bm.getWidth(); 
        int height = bm.getHeight(); 

        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;

        // create a matrix for the manipulation
        Matrix matrix = new Matrix();

        // resize the bit map
        matrix.postScale(scaleWidth, scaleHeight);

        // recreate the new Bitmap
        Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);

        return resizedBitmap; 
        }

Я использую этот код для масштабирования изображений для отображения на экране, поэтому, если экран имеет размер 320х480, изображение будет масштабироваться до 320 с сохранением пропорций, мне все равно, будет ли изображение выходить из экрана снизу.

Все работает нормально, но при попытке в устройстве xhdpi конкретно Samsung Galaxy Note 2 с экраном ровно 720x1280.

Это вылетает с Out Of Memory Exception в строке:

Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);

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

Я не пробовал устройство 1080x1920, но, похоже, оно тоже будет зависать.

Кто-то может увидеть что-то плохое, глядя на код?

Ответы на вопрос(2)

Ваш ответ на вопрос