Brak pamięci podczas tworzenia bitmap na urządzeniu

Mam problemy z obrazami o wysokiej rozdzielczości.

Używam folderu nodpi-drawable dla obrazów 1280x720 i używam tego kodu do skalowania.

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; 
        }

Używam tego kodu do skalowania obrazów do ekranu, więc jeśli ekran ma rozmiar 320x480, obraz będzie skalowany do 320 i zachowa proporcje, nie obchodzi mnie, czy obraz wychodzi z ekranu od dołu.

Wszystko działa bez zarzutu, ale podczas próby urządzenia xhdpi konkretnie Samsung Galaxy Note 2 z ekranem dokładnie 720x1280.

Zawiesza się z wyjątkiem Out of Memory Exception w linii:

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

Nie rozumiem dlaczego, obraz powinien być skalowany od 720 do 720, ale mój kod musi być naprawdę źle zoptymalizowany lub coś takiego.

Nie próbowałem urządzenia 1080x1920, ale wygląda na to, że również ulegnie awarii.

Ktoś widzi coś złego patrząc na kod?

questionAnswers(2)

yourAnswerToTheQuestion