Android, загрузка изображений и распределение памяти - PullRequest
0 голосов
/ 25 января 2011

У меня есть приложение, которое содержит несколько пользовательских представлений, расширяющих представление. Каждый пользовательский вид загружает кучу изображений (~ 20) и масштабирует их:

mBmp[img1] = BitmapFactory.decodeStream(context.getAssets().open("img01.png"));
mBmp[img2] = BitmapFactory.decodeStream(context.getAssets().open("img02.png"));
mBmp[img3] = BitmapFactory.decodeStream(context.getAssets().open("img03.png"));
        ...
mBmp[img20] = BitmapFactory.decodeStream(context.getAssets().open("img20.png"));

Это все в блоке try - catch.

Эта часть не вызывает никаких проблем. Однако, как только я достигаю точки масштабирования изображений и вызываю метод масштабирования, который использует createScaledBitmap:

protected void scaleImages(float mWidth, float mHeight)
    {
        float mXRat = mWidth/1024;
        float mYRat = mHeight/600;

        for (int i = 0; i < mBmp.length; i++)
        {
            float oldX = mBmp[i].getWidth();
            float oldY = mBmp[i].getHeight();
            double newX = (mXRat * oldX);
            double newY = (mYRat * oldY);
            Bitmap newBmp = Bitmap.createScaledBitmap(mBmp[i], (int) newX, (int) newY, true);
            mBmp[i] = newBmp;
        }
    }

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

01-25 10:16:44.227: ERROR/dalvikvm-heap(14548): 1497600-byte external allocation too large for this process.
01-25 10:16:44.227: ERROR/dalvikvm(14548): Out of memory: Heap Size=4871KB, Allocated=2544KB, Bitmap Size=18683KB
01-25 10:16:44.227: ERROR/GraphicsJNI(14548): VM won't let us allocate 1497600 bytes

Ни один мой образ не должен занимать такого рода память при расширении в ОЗУ, так почему же он заканчивается при попытке изменить их размер?

1 Ответ

0 голосов
/ 25 января 2011

это не один размер изображения. Это сообщение показывается, потому что вы декодируете его в растровое изображение, и оно сохраняется в куче для temp.so оно отображает msg.

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