【问题标题】:Error when select image from gallery从图库中选择图像时出错
【发布时间】:2013-06-29 16:32:44
【问题描述】:

我从图库中选择 700kb 图像并收到 IllegalArgumentException。我将此与recycle() 的用法联系起来以节省一些内存。当我开始出现 OutOfMemoryError 时,它变成了实际问题,所以我认为我必须使用回收。我是否以错误的方式调用它或有一些规则如何使用它?

错误:

07-02 10:25:27.466: E/AndroidRuntime(2422): FATAL EXCEPTION: main
07-02 10:25:27.466: E/AndroidRuntime(2422): java.lang.IllegalArgumentException: Cannot draw recycled bitmaps
07-02 10:25:27.466: E/AndroidRuntime(2422):     at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:778)
07-02 10:25:27.466: E/AndroidRuntime(2422):     at android.view.GLES20RecordingCanvas.drawBitmap(GLES20RecordingCanvas.java:117)

呼叫:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(
intent, "Select Picture"), 31);

onResult:

if (requestCode == 31 && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();
            Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
            pho1.setImageBitmap(bitmap);
            // ImageView imageView = (ImageView) findViewById(R.id.imgView);
            // imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
            //

            // Bitmap bitmap = (Bitmap) data.getExtras().get("data");
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream);
            byte[] byte_arr = stream.toByteArray();

            photo1 = Base64.encodeToString(byte_arr, Base64.DEFAULT);
            bitmap.recycle();
            bitmap = null;
            byte_arr=null;

            try {
                stream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

【问题讨论】:

  • 抱歉,有什么区别?
  • 您正在尝试将图像转换为字符串...只需查看此答案:stackoverflow.com/a/12239626/1168654
  • 我明白了,如果我想显示图像,我无法回收。不过,在我之前,在将其设置为 ImageView 之后调用recycle 是可以的。为什么你提到字符串转换?它是用于其他目的并且可以正常工作还是会干扰其他事情?

标签: android illegalargumentexception recycle


【解决方案1】:

请移除 bitmap.recycle();声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2019-04-17
    • 2021-07-08
    • 2020-12-21
    • 2020-01-29
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多