zoukankan      html  css  js  c++  java
  • Android开发之大位图二次採样压缩处理(源码分享)

              图片有各种形状和大小。在很多情况下这些图片是远远大于我们的用户界面(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;
    	}
    
    }
    


  • 相关阅读:
    三星t5拆解
    一条 SQL 引发的事故,同事直接被开除!!
    Git 不能提交空目录?我也是醉了!
    Redis 6.0.8 紧急发布,请尽快升级!
    String.format() 图文详解,写得非常好!
    为什么 Redis 要比 Memcached 更火?
    Lambda 表达式入门,这篇够了!
    天啊,为什么我的 Redis 变慢了。。
    写出一手烂代码的 19 条准则!
    Redis 面试一定要知道的 3 个 问题!
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3880436.html
Copyright © 2011-2022 走看看