【问题标题】:retrieve image from gallery in android从android中的图库中检索图像
【发布时间】:2011-01-13 12:44:41
【问题描述】:

我创建了一个Activity,其中我有一个Button

按下按钮会打开一个安卓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;  
                 }     
}

【问题讨论】:

    标签: android


    【解决方案1】:

    有很多与此相关的答案。 Check it out.

    【讨论】:

      【解决方案2】:

      我也遇到过同样的问题。为了防止这种情况发生,您可以做的是确保在加载新的位图之前回收以前的位图。调用 Bitmap.recycle() 来执行此操作。 http://developer.android.com/reference/android/graphics/Bitmap.html#recycle()

      我看不到您在代码中处理位图的位置,但您明白了吗?

      处理位图时的另一件事是,在读入内存时要注意它们的实际大小,您是否真的需要为您的用例提供这么大的图像。如果您不需要完整的图像,您可以使用较低的采样率将位图读取到您的应用程序中。这样可以节省大量内存。

      【讨论】:

        【解决方案3】:

        这是一个很常见的问题。这可能是因为您有很多图像,并且 Android 模拟器堆大小很小。所以你必须在每次使用后回收你的imagebitmap。

        See this question.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-04-02
          • 2014-02-19
          • 2015-07-06
          • 2016-07-16
          • 2014-09-18
          • 2012-06-05
          • 1970-01-01
          相关资源
          最近更新 更多