Android 相机调用简化工具

调用安卓相机的代码稍微有点复杂,我将其进行了包装,简化调用的过程。
这个包装类能实现:调用相机、修改尺寸、获得位图 这三个基本功能。


由于涉及到向SD卡中写数据的操作,因此需要在 AndroidManifest.xml 中声明权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

创建一个 TakePhoto 类,代码如下:

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

public class TakePhoto {

    private String imagePath;
    private String imageName;
    private Uri imageUri;

    public TakePhoto() {
        //默认保存在SD卡根目录
        imagePath = Environment.getExternalStorageDirectory().toString();
        imageName = "output_image.jpg";
    }

    public TakePhoto(String imagePath, String imageName) {
        //自定义路径及文件名
        this.imagePath = imagePath;
        this.imageName = imageName;
    }

    //调用相机
    public Uri invokeCamera(Context context) {
        createUri();
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        //启动相机程序
        context.startActivity(intent);
        return imageUri;
    }

    //裁剪相片
    public Uri editPicture(Context context) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(imageUri, "image/*");
        intent.putExtra("scale", true);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        //启动裁剪程序
        context.startActivity(intent);
        return imageUri;
    }

    //生成Uri对象
    private void createUri() {
        File outputImage = new File(imagePath, imageName);
        try {
            //生成空白文件
            if (outputImage.exists()) {
                outputImage.delete();
            }
            outputImage.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        imageUri = Uri.fromFile(outputImage);
    }

    //得到Bitmap对象
    public Bitmap getBitmap(Context context) {
        try {
            return BitmapFactory.decodeStream(context.getContentResolver().openInputStream(imageUri));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

最后在 Activity 中测试,核心代码如下:

    class OnClick implements View.OnClickListener {
        TakePhoto takePhoto = new TakePhoto();

        @Override
        public void onClick(View v) {

            switch (v.getId()) {
                case R.id.btn1:
                    //调用相机
                    takePhoto.invokeCamera(MyActivity.this);
                    break;
                case R.id.btn2:
                    //修改尺寸
                    takePhoto.editPicture(MyActivity.this);
                    break;
                case R.id.btn3:
                    //获得图片
                    Bitmap bitmap = takePhoto.getBitmap(MyActivity.this);
                    imageView.setImageBitmap(bitmap);
                    break;
                default:
                    break;
            }
        }
    }

运行截图:
调用相机

裁剪图片

显示位图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值