Blackberry - OutOfMemory при обработке больших изображений - PullRequest
1 голос
/ 29 августа 2011

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

    Bitmap imgBtm = encodedImagePng.getBitmap();

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

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

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

Tks

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Вы должны изменить размер закодированного изображения перед использованием функции 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;
    }

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

0 голосов
/ 29 августа 2011

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

...