我们做二级采样的时候最好用到一个工具类 工具类在下一遍 一些简单易懂的代码 可参考

本文介绍了一个Android应用中实现图片选择、二次采样和质量压缩的方法。通过使用Intent.ACTION_PICK选择图片,然后利用自定义的ImageUtil类进行图片尺寸调整和质量压缩,最终在ImageView中显示处理后的图片。

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

public class MainActivity extends AppCompatActivity {

private EditText width;//宽
private EditText height;//高
private EditText quality;//质量

private Button getImage;//获取图片
private Button show;//显示图片
private ImageView image;

private final int PICK_IMAGE = 100;
private Uri uri;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Bitmap bitmpa;

    //bitmpa.compress(Bitmap.CompressFormat.JPEG, 70, );

    width = findViewById(R.id.width);
    height = findViewById(R.id.height);
    quality = findViewById(R.id.quality);

    getImage = findViewById(R.id.get_image);
    show = findViewById(R.id.show);

    image = findViewById(R.id.image);

    getImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(intent, PICK_IMAGE);
        }
    });


    show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String filePath = getRealPathFromURI(uri);

            //二次采样
            Log.i("TEST",filePath);
            Bitmap bitmap = ImageUtil.scaleBitmap(filePath, Integer.parseInt(width.getText().toString()), Integer.parseInt(height.getText().toString()));

            bitmap = ImageUtil.compress(bitmap, Integer.parseInt(quality.getText().toString()), new File(Environment.getExternalStorageDirectory(), "tmp2.jpg"));
            image.setImageBitmap(bitmap);
            //BitmapFactory.de
            //质量压缩

            //展示
        }
    });
}

private String getRealPathFromURI(Uri contentUri) { //传入图片uri地址
    String[] proj = { MediaStore.Images.Media.DATA };
    CursorLoader loader = new CursorLoader(this, contentUri, proj, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if(requestCode == PICK_IMAGE) {
        if(resultCode == RESULT_OK) {
            //图片uri
            uri = data.getData();
        }
        return;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值