android按路径读取相册图片 完美解决Bitmap内存溢出问题

原创 2014年12月25日 15:36:44

最近在做一个读取相册图片,先展示出来,选取后再拼接图片,最终上传拼接好的图片的功能。


1.图片选取功能(读取图片)部分代码(功能1)

<span style="font-size:14px;">	private BaseAdapter getBaseAdapter() {// 返回当前界面所需的Adapter
		final BitmapFactory.Options options = new BitmapFactory.Options();
		options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一
		BaseAdapter adapter = new BaseAdapter() {
			@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				ImageView iv = null;
				try {
					if (bmp[position] == null) {// 优化读取本地图片
						bmp[position] = BitmapFactory.decodeFile(
								imagePath[position], options);
						// 对原位图进行缩放
						bmp[position] = Bitmap.createScaledBitmap(
								bmp[position], 165, 165, true);
					}
				} catch (Exception e) {
					Log.d(position + "", bmp[position] + "");

				}
				if (convertView == null) {
					LayoutInflater inflater = LayoutInflater
							.from(ImageSelectActivity.this);
					iv = (ImageView) inflater.inflate(
							R.layout.gvselect_list_imageselect, null);
					convertView = iv;
				}
				((ImageView) convertView).setImageBitmap(bmp[position]);
				return convertView;
			}

			@Override
			public long getItemId(int position) {
				return 0;
			}

			@Override
			public Object getItem(int position) {
				return null;
			}

			@Override
			public int getCount() {
				return imagePath.length;
			}
		};
		return adapter;
	}</span>

2.图片拼接功能(读取图片)部分代码(功能2)

<pre class="javascript" name="code">	// 整理上一界面所选取的图片
	private void tidy_upPhoto() {
		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一
		for (int i = 0; i < ImageSelectActivity.bmpPath.length; i++) {
			if (ImageSelectActivity.bmpPath[i] != null) {
				getBmp[indexBmp] = BitmapFactory.decodeFile(
						ImageSelectActivity.bmpPath[i], options);			
				++indexBmp;
			}
		}
	}

我的功能1中读取了300多张图片没有报内存溢出,但是功能2中只读取了8张图片就内存溢出了。后来我反复比较才发现原来功能1中与功能2中最大的差别就是:功能2没有这部分代码

// 对原位图进行缩放
						bmp[position] = Bitmap.createScaledBitmap(
								bmp[position], 165, 165, true);


后来对功能二进行了如下修改:

	// 整理上一界面所选取的图片
	private void tidy_upPhoto() {
		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一
		int width;
		int height;
		for (int i = 0; i < ImageSelectActivity.bmpPath.length; i++) {
			if (ImageSelectActivity.bmpPath[i] != null) {
				getBmp[indexBmp] = BitmapFactory.decodeFile(
						ImageSelectActivity.bmpPath[i], options);
				Log.d(i + "", "宽" + options.outWidth + ",高" + options.outHeight);
				width=(int) (options.outWidth/1.8);
				height=(int) (options.outHeight/1.8);
				if (options.outWidth>1000||options.outHeight>1000) {//宽或高大于1000
					// 对原位图进行缩放
					getBmp[indexBmp] = Bitmap.createScaledBitmap(getBmp[indexBmp],
							width, height, true);
				}				
				++indexBmp;
			}
		}
	}

至此解决了内存溢出的问题,希望对大家有所帮助



读取本地路径转换成bitmap的方法,以及避免outmemory

1、将图片转化为缩略图再加载:  [java] view plaincopy BitmapFactory.Options options = new B...

android从Uri得到Bitmap内存溢出问题

昨天遇到这个问题就是从一个输入流里调用BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri))得到一个bit...
  • nnmmbb
  • nnmmbb
  • 2015年03月18日 18:27
  • 1563

彻底解决Android 拍照 内存溢出 Out of Memory的问题

内存溢出相信做过编程的人都知道一二,这里说Android 内存溢出的问题:、问题描述:Android下的相机在独自使用时,拍照没有问题,通过我们的代码调用时,也正常,但是更换了不同厂商的平板,ROM由...
  • cctcc
  • cctcc
  • 2014年10月15日 21:29
  • 10511

eclipse下第一个Android NDK应用

也说不上原创吧。因为最近要做一个视频播放的功能,需要用到FFmpeg,但这个的引用又不像搞个jar包引用一下就完事这么方便。通过逐步的学习与了解,才发现这属于我从未开发过的NDK应用。所以搞不懂,也还...

Android实现选择相册图片和拍照,并手动截图返回图片路径和Bitmap对象

直接贴代码: 不懂的地方可以联系我扣扣 1668126018 以下是几个类: 代码Copy可以直接用 记得加读写权限 package com.mcdemo.icon;import and...

Android从服务器取图片向Bitmap加载时内存溢出问题

最近暑假在做一个APP项目,需要从服务器取图片。 突然就显示BitmapFactory.decodeStream java.lang.OutOfMemoryError 意思是内存溢出了,在网上搜...

android-----解决Bitmap内存溢出的一种方法(图片压缩技术)

我们在平常使用Bitmap的过程中经常会遇到OOM异常,为此困扰了我两三天时间,接下来把我自己的解决方法讲述一下:         首先来看看为什么使用Bitmap会导致OOM异常的,假如采用Bi...

android加载大量图片内存溢出bitmap size exceeds VM budget的解决办法。

方法一: 在从网络或本地加载图片的时候,只加载缩略图。 /** * 按照路径加载图片 * @param path 图片资源的存放路径 * @param scalSize 缩小的倍数...
  • jdsjlzx
  • jdsjlzx
  • 2012年05月21日 23:16
  • 4209

Android 4.4 前后版本读取图库图片和拍照完美解决方案-获取文件路径

文章出处:http://blog.csdn.net/zbjdsbj/article/details/423875514.3或以下,选了图片之后,根据Uri来做处理,很多帖子都有了,我就不详细说了.主要...

Android实战开发之ViewPager图片回收处理内存溢出完美解决方案(含Fragment)

在Android实战开发中,ViewPager使用广泛,但使用ViewPager加载多个图片容易出现内存溢出的问题,解决此类内存溢出,需要主要注意以下2点: 1、是否进行过图片压缩处理; Op...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android按路径读取相册图片 完美解决Bitmap内存溢出问题
举报原因:
原因补充:

(最多只允许输入30个字)