2011-01-13 2 views
0

Я создал Activity, где у меня есть Button.Загрузить изображение из галереи в android

При нажатии на кнопку открывается андроид Gallery. Когда я выбрать изображение из галереи это показывает, что он в ImageView моего Activity, но после выбора второго раза следующей ошибки происходя

01-13 17:55:25.323: ERROR/AndroidRuntime(14899): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

Вот исходный код я использую:

public class MyImage extends Activity { 
    /** Called when the activity is first created. */ 
    Gallery gallery; 
    private Uri[] mUrls; 
    String[] mFiles=null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

      File images = Environment.getDataDirectory(); 
       File[] imagelist = images.listFiles(); 

        mFiles = new String[imagelist.length]; 

          for(int i= 0 ; i< imagelist.length; i++) 
          { 
           mFiles[i] = imagelist[i].getAbsolutePath(); 
          } 
          mUrls = new Uri[mFiles.length]; 

          for(int i=0; i < mFiles.length; i++) 
          { 
           mUrls[i] = Uri.parse(mFiles[i]);  
          }  

          Gallery g = (Gallery) findViewById(R.id.Gallery01); 
          g.setAdapter(new ImageAdapter(this)); 
          g.setFadingEdgeLength(40); 
    } 

    public class ImageAdapter extends BaseAdapter{ 

       int mGalleryItemBackground; 
       public ImageAdapter(Context c) {  
        mContext = c;  
       } 
       public int getCount(){ 
        return mUrls.length; 
       } 
       public Object getItem(int position){ 
        return position; 
       } 
       public long getItemId(int position) { 
        return position; 
       } 
       public View getView(int position, View convertView, ViewGroup parent){ 
        ImageView i = new ImageView(mContext); 

        i.setImageURI(mUrls[position]); 
        i.setScaleType(ImageView.ScaleType.FIT_XY); 
        i.setLayoutParams(new Gallery.LayoutParams(260, 210)); 
        return i; 
       }  
       private Context mContext; 
       }  
} 

ответ

1

Я столкнулся с этой точно такой же проблемой. Что вы можете сделать, чтобы это не произошло, так это убедиться, что вы переработали предыдущий битмап, прежде чем загружать новый. Для этого вызовите Bitmap.recycle(). http://developer.android.com/reference/android/graphics/Bitmap.html#recycle()

Я не вижу, где вы обрабатываете растровые изображения в коде, но вы получаете идею?

Другое дело, что при обращении с растровыми изображениями нужно держать в уме, насколько они велики, когда они читаются в памяти, и вам действительно нужно иметь эти большие изображения для вашего использования. Вы можете прочитать Bitmap для своего приложения с более низкой частотой дискретизации, если вам не нужно иметь полное изображение. Это экономит много памяти.

1

очень часто prob.it является bcoz у, может быть, имея много images.and размер андроид эмулятор кучи small.so вы должны переработать ур imagebitmap каждый раз после того, как у использовал его ..


это поможет вам: [


link text

] 1

+0

на самом деле ошибка приходит и в реальном устройстве! –

+0

спасибо за помощь –

Смежные вопросы