热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

最近在做一个读取相册图片,先展示出来,选取后再拼接图片,最终上传拼接好的图片的功能。1.图片选取功能(读取图片)部分代码(功能1)<spanstylefont-

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


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

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

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

	// 整理上一界面所选取的图片
	private void tidy_upPhoto() {
		BitmapFactory.Options optiOns= new BitmapFactory.Options();
		options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一
		for (int i = 0; i  
 
 
 

我的功能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 1000||options.outHeight>1000) {//宽或高大于1000
					// 对原位图进行缩放
					getBmp[indexBmp] = Bitmap.createScaledBitmap(getBmp[indexBmp],
							width, height, true);
				}				
				++indexBmp;
			}
		}
	}

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



推荐阅读
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
author-avatar
a105451223
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有