质量压缩与二级采样

本文介绍了一种在Android应用中实现图片压缩的方法。通过BitmapFactory.Options进行二次采样压缩,并使用质量压缩来减小文件大小。同时展示了如何将压缩后的图片设置到ImageView中进行显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MainActivity extends AppCompatActivity {
private ImageView imageview;
private ImageView imageview1;
private String path=”/sdcard/Download/aa.png”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    imageview= (ImageView) findViewById(R.id.image);
    imageview1= (ImageView) findViewById(R.id.image_comp);

    Bitmap bitmap= BitmapFactory.decodeFile(path);
    showBitMap(bitmap);
    imageview.setImageBitmap(bitmap);
    //质量压缩
    massCompression(bitmap,100,"aa_100.png");
    //二级采样
    doubleSampling();

}

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void doubleSampling() {
    //Option二次采样压缩的配置参数
    BitmapFactory.Options options=new BitmapFactory.Options();
    //加载Bitmap时 只加载图片的信息  边框  不加载图片本身
    options.inJustDecodeBounds = true;
    //把图片的信息 保存到options
    BitmapFactory.decodeFile(path,options);

    ViewGroup.LayoutParams lp = imageview1.getLayoutParams();
    int imageWidth = lp.width;
    int imageHeight= lp.height;
    Log.e("bitmap", "onCreate: "+imageWidth+"---"+imageHeight);
    //300 200
    int size=1;
    while(options.outWidth/size>imageWidth||options.outHeight/size>imageHeight){
        size=size*2;
    }

    options.inSampleSize=size;
    options.inJustDecodeBounds=false;

    Bitmap bitmap = BitmapFactory.decodeFile(path,options);
    showBitMap(bitmap);
    massCompression(bitmap,30,"aa_30_1.png");
    imageview1.setImageBitmap(bitmap);

}

private void massCompression(Bitmap bitmap,int quality,String fileName) {
    String savePath = "/sdcard/Download/"+fileName;
    try {
        FileOutputStream fos=new FileOutputStream(savePath);
        bitmap.compress(Bitmap.CompressFormat.JPEG,quality,fos);
        fos.flush();
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void showBitMap(Bitmap bitmap) {
    int width= bitmap.getWidth();
    int height =bitmap.getHeight();
    int byteCount = bitmap.getByteCount();
    int byteCount1 = bitmap.getRowBytes()*bitmap.getHeight();

    Log.e("bitmap", "onCreate: "+width+"---"+height+"---"+byteCount+"---"+byteCount1);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值