Я разрабатываю приложение, которое показывает большие изображения ... Есть много изображений размером около 700x8100 ... Я могу создать объект типа EncodedImage, не вызывая исключения, но когда я пытаюсь выполнить getBitmap, я получаю ошибку OutOfMemory. Это строка, в которой возникает исключение:

    Bitmap imgBtm = encodedImagePng.getBitmap();

Есть ли какое-то ограничение на размер разрешения?

Кому-нибудь уже приходилось обрабатывать большие изображения?

Любая помощь будет очень полезной ..

Tks

1
henriqueor 29 Авг 2011 в 00:51

2 ответа

Лучший ответ

Перед использованием функции getBitmap () необходимо изменить размер закодированного изображения. Сначала создайте свой EncodedImage, а затем измените его масштаб, используя следующее:

private static EncodedImage rescaleEncodedImage (EncodedImage image, int width, int height) {
        EncodedImage result = null;
        try {
            int currentWidthFixed32 = Fixed32.toFP(image.getWidth());
            int currentHeightFixed32 = Fixed32.toFP(image.getHeight());
            int requiredWidthFixed32 = Fixed32.toFP(width);
            int requiredHeightFixed32 = Fixed32.toFP(height);
            int scaleXFixed32 = Fixed32.div(currentWidthFixed32, requiredWidthFixed32);
            int scaleYFixed32 = Fixed32.div(currentHeightFixed32, requiredHeightFixed32);
            result = image.scaleImage32(scaleXFixed32, scaleYFixed32);
        }
        catch (Exception ex) {

        }
        return result;
    }

А затем после изменения размера получить от него растровое изображение

1
Farid Farhat 29 Авг 2011 в 07:38

Вы не можете считывать изображения большого размера в память устройства. Существуют встроенные методы декодирования изображения при его уменьшении, что позволяет избежать загрузки исходного изображения в память. Попробуйте EncodedImage.scaleImage32, чтобы установить более разумный размер перед получением растрового изображения.

0
Michael Donohue 28 Авг 2011 в 21:34