android按路径读取相册图片 完美解决Bitmap内存溢出问题
来源:互联网 发布:域名代理商源码 编辑:程序博客网 时间:2024/05/16 15:33
最近在做一个读取相册图片,先展示出来,选取后再拼接图片,最终上传拼接好的图片的功能。
1.图片选取功能(读取图片)部分代码(功能1)
<span style="font-size:14px;">private BaseAdapter getBaseAdapter() {// 返回当前界面所需的Adapterfinal BitmapFactory.Options options = new BitmapFactory.Options();options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一BaseAdapter adapter = new BaseAdapter() {@Overridepublic 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;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic 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;}}}
至此解决了内存溢出的问题,希望对大家有所帮助
0 0
- android按路径读取相册图片 完美解决Bitmap内存溢出问题
- 解决读取bitmap内存溢出问题
- 解决Android Bitmap内存溢出问题
- android bitmap设置图片内存溢出的解决神器
- android解决图片内存溢出问题
- android Bitmap过大内存溢出问题的解决
- android中使用SoftRefrence解决Bitmap过大内存溢出问题
- android中使用SoftRefrence解决Bitmap过大内存溢出问题
- android bitmap溢出问题完美解决方案
- 解决Bitmap导致的内存溢出问题
- android选择本地相册图片路径的问题的解决
- Android Bitmap图片处理,防止内存溢出
- android解决bitmap内存溢出之二
- Android 解决 图片内存溢出
- Android Bitmap 内存溢出的问题
- 缩放图片,解决bitmap 内存溢出out of memory的问题
- Bitmap内存溢出问题
- Android Bitmap内存管理,解决内存溢出问题(1)之自定义BitmapDrawable
- (Visual Studio)Solve problems like "MSVCR110.dll is missing from your compute"
- FORM开发之Tab Canvas
- 示波器地线应用注意问题
- [python2.x] 获取IP地址所在地理位置
- Struts2文件下载
- android按路径读取相册图片 完美解决Bitmap内存溢出问题
- url中有中文参数时,后台乱码怎么整
- cocos2d 内存管理
- git tag 使用方法总结
- std_msgs::UInt8MultiArray发布数组
- kickstart配置文件详解
- 有哪些实用的计算机相关技能,可以在一天内学会 (有个SVN和GIT的)
- glib配置错误(gtk-doc、libtool、automaker、autoconf的安装)
- hdu 1358 Period