博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发之大位图二次採样压缩处理(源码分享)
阅读量:6403 次
发布时间:2019-06-23

本文共 1817 字,大约阅读时间需要 6 分钟。

          图片有各种形状和大小。在很多情况下这些图片是远远大于我们的用户界面(UI)且占领着极大的内存空间,假设我们不正确位图进行压缩处理,我们的程序会发生内存泄露的错误。

MainActivity的代码

package com.example.g08_bitmap;import android.os.Bundle;import android.app.Activity;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.widget.ImageView;public class MainActivity extends Activity {	private ImageView imageView;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		imageView = (ImageView) this.findViewById(R.id.imageView1);		imageView.setImageBitmap(decodeSampledBitmapFromResource(				getResources(), R.drawable.a, 300, 300));	}	public static Bitmap decodeSampledBitmapFromResource(Resources res,			int resId, int reqWidth, int reqHeight) {		final BitmapFactory.Options options = new BitmapFactory.Options();		//先将inJustDecodeBounds属性设置为true,解码避免内存分配		options.inJustDecodeBounds = true;		// 将图片传入选择器中		BitmapFactory.decodeResource(res, resId, options);		// 对图片进行指定比例的压缩		options.inSampleSize = calculateInSampleSize(options, reqWidth,				reqHeight);		//待图片处理完毕后再进行内存的分配,避免内存泄露的发生		options.inJustDecodeBounds = false;		return BitmapFactory.decodeResource(res, resId, options);	}	// 计算图片的压缩比例	public static int calculateInSampleSize(BitmapFactory.Options options,			int reqWidth, int reqHeight) {		// Raw height and width of image		final int height = options.outHeight;		final int width = options.outWidth;		int inSampleSize = 1;		if (height > reqHeight || width > reqWidth) {			final int heightRatio = Math.round((float) height					/ (float) reqHeight);			final int widthRatio = Math.round((float) width / (float) reqWidth);			// 选择长宽高较小的比例,成为压缩比例			inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;		}		return inSampleSize;	}}

转载地址:http://tcnea.baihongyu.com/

你可能感兴趣的文章
yum 安装报 关于Public key for *.rpm is not installed 的解决方法
查看>>
perl检测无效符号链接
查看>>
两个安卓手机的链接socket(套接字)编程
查看>>
Java面试题:Integer i = 127;Integer j = 127;比较
查看>>
安装pywin32
查看>>
如何进行文章分类和标签的数据库设计
查看>>
黑科技:程序猿如何打造属于自己的分体键盘
查看>>
“Zabbix poller processes more than 75% busy”警报问题解决
查看>>
PhpStorm创建Drupal模块项目开发教程
查看>>
swap分区的作用,如何决定swap分区的大小
查看>>
自己总结的oracle开发中需要注意的几点
查看>>
性能调优之tomcat生产部署关键参数设置
查看>>
老李分享: Oracle Performance Tuning Overview 翻译
查看>>
微信小程序学习之externalClasses的用法
查看>>
Linux的基础目录命名法则及功用
查看>>
计模式:单例模式
查看>>
iptables详解
查看>>
Python之Linux下开发环境部署
查看>>
在地址栏加上网站的标志、LOGO图片
查看>>
Linux文件系统小结
查看>>