黑莓 - 处理大图像时的OutOfMemory

时间:2011-08-28 20:51:35

标签: blackberry java-me

我正在开发一个显示大图像的应用程序..有很多图像的大小约为700x8100 ..我可以创建一个类型为EncodedImage的对象,而不会抛出异常,但当我尝试执行getBitmap时,我收到一个OutOfMemory错误。 这是发生异常的行:

    Bitmap imgBtm = encodedImagePng.getBitmap();

是否有任何类型的分辨率大小限制?

有没有人必须处理大图片?

任何帮助都非常有用..

韩国社交协会

2 个答案:

答案 0 :(得分:1)

在使用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 :(得分:0)

您无法读取设备内存中如此大的图像。有一些内置的方法可以在缩小图像时解码图像,这样可以避免将原始图像加载到内存中。在获取位图之前,请尝试EncodedImage.scaleImage32设置更合理的维度。