2013-07-02 4 views
0

갤러리에서 700kb 이미지를 선택하고 IllegalArgumentException을 수신합니다. 나는 약간의 메모리를 절약하기 위해 이것을 recycle()의 ussage와 링크한다. 그것은 내가 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(); 
      } 
+0

http://stackoverflow.com/a/2508138/1168654 –

+0

죄송하지만 무슨 차이가 있습니까? – Yarh

+1

당신은 이미지를 String으로 변환하려고합니다 ...이 ans를 살펴보십시오. http://stackoverflow.com/a/12239626/1168654 –

답변

0

제거하십시오 bitmap.recycle(); 성명서.

관련 문제