簡體   English   中英

從android中的圖庫中檢索圖像

[英]retrieve image from gallery in android

我創建了一個Activity ,其中有一個Button

按下按鈕會打開一個 android Gallery 當我從圖庫中選擇一個圖像時,它會在我的ActivityImageView中顯示它,但是在第二次選擇后出現以下錯誤

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;  
                 }     
}

有很多與此相關的答案。 檢查一下

我也遇到過這個完全相同的問題。 為了防止這種情況發生,您可以做的是確保在加載新位圖之前回收先前的位圖。 調用 Bitmap.recycle() 來做到這一點。 http://developer.android.com/reference/android/graphics/Bitmap.html#recycle ()

我沒有看到您在代碼中處理位圖的位置,但您明白了嗎?

處理位圖時的另一件事是記住它們在讀入內存時實際有多大,並且您是否真的需要為您的用例提供那么大的圖像。 如果您不需要完整圖像,您可以以較低的采樣率將位圖讀取到您的應用程序中。 這樣可以節省大量內存。

這是很常見的問題。 可能是因為你有很多圖像,而Android模擬器堆大小很小。 所以每次使用后你都必須回收你的imagebitmap。

看到這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM