java - Android:应用程序在上传图片时在设备上崩溃,java.lang.outofMemoryError

标签 java android bitmap android-image

在我的 android 应用程序中,我必须允许用户单击一个按钮来打开图库并选择图像。然后需要将该特定的选定图像加载到我的布局(UI)中的 ImageView 。我有一些代码,但它来自 java.lang.outofmemory。请有人能帮助我吗?

最佳答案

您应该在 onActivityResult() 方法上解码图像 uri。 调用此方法解码Bitmap。

/**
     * This is very useful to overcome Memory waring issue while selecting image
     * from Gallery
     * 
     * @param selectedImage
     * @param context
     * @return Bitmap
     * @throws FileNotFoundException
     */
    public static Bitmap decodeBitmap(Uri selectedImage, Context context)
            throws FileNotFoundException {
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(context.getContentResolver()
                .openInputStream(selectedImage), null, o);

        final int REQUIRED_SIZE = 100;

        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE) {
                break;
            }
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }

        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(context.getContentResolver()
                .openInputStream(selectedImage), null, o2);
    }

有关更多详细信息,请查看主题高效显示位图

http://developer.android.com/training/displaying-bitmaps/index.html

希望对您有所帮助。

关于java - Android:应用程序在上传图片时在设备上崩溃,java.lang.outofMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19429839/

相关文章:

java - 将 JSON 反序列化为未知类型的集合

java - 如何使用 Apache HttpClient 发布 JSON 请求?

java - 任意基数填充格式

java - 隐藏多个空 TextView

flash - 生成大量位图时,创建的位图会变成全黑

java - 可以停止使用 httpConnection.connect() 连接到 URL 的线程吗?

android - Google Play 游戏服务 - AchievementBuffer 顺序错误

android - 在 sencha touch 表单提交中加载掩码

C# 画图程序闪烁

android - 使用位图的 ListView