Bitmap二次采样

Android图片加载由于手机内存的原因,大图往往会使手机OOM(out of memory),所以需要对图片进行相应的压缩。

android提供了一个类BitmapFactory.Options,想获得一个图片对象要提供一个Options对象参数。

代码实现:

布局文件代码:

线性布局中放置两张图片,一张用来显示原图,一张用来显示二次采样后的图。点击按钮显示两张图片。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.shen.picsecondepicdemo.MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ChangePic"
        android:onClick="changePic"/>
   
    <ImageView
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ivPicOri"
        android:src="@mipmap/ic_launcher"/>
    <ImageView
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ivPic"
        android:src="@mipmap/ic_launcher"/>
</LinearLayout>
主要代码:

public class MainActivity extends AppCompatActivity {
    private ImageView ivPic;
    private ImageView ivPicOri;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ivPic = (ImageView) findViewById(R.id.ivPic);
        ivPicOri = (ImageView) findViewById(R.id.ivPicOri);

    }
    public void changePic(View view){
	//设置原始图片资源
        ivPicOri.setImageResource(R.mipmap.b);

	//进行压缩图片
        BitmapFactory.Options options = new BitmapFactory.Options();
	
	//设定先加载图片框,不加载图片,用来测量原始图的宽和高
        options.inJustDecodeBounds = true;
	
	//测量
        BitmapFactory.decodeResource(getResources(),R.mipmap.b,options);
 
	//自定义宽和高
        int myWidth = 50;
        int myHeight = 80;
 
	//得到原始图片的宽和高
        int realWidth = options.outWidth;
        int realHeight = options.outHeight;
        Log.i("realWidth",realWidth+"");
        Log.i("realHeight",realHeight+"");
	
	//先设定一个压缩比
        int sampleSize = 1;
 
	//进行对比来决定真实的压缩比
        sampleSize = Math.round((float)realHeight/myHeight)>Math.round((float)realWidth/myWidth)?Math.round((float)realHeight/myHeight):Math.round((float)realWidth/myWidth);
 
	//设定真实的压缩比
        options.inSampleSize = sampleSize;
        options.inJustDecodeBounds = false;
 
	//显示压缩后的图
        ivPic.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.b,options));
    }
}
点击按钮进行图片二次采样后效果如图~

小伙伴们也来试试吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值