Android调用系统相机和图库

Android调用系统相机和图库

程序截图

只实现了调用系统相机和本地图库,上传图片将在下一篇博客实现,这里推荐一个获取Android按钮图片的插件Android Drawable Importer

th

主要过程

(一)添加读写权限

这里是调用系统相机,不需要获取相机权限。
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

(二)调用系统相机和图库

1.调用系统相机
这里是使用Intent的参数MediaStore.ACTION_IMAGE_CAPTURE 来实现的,然后调用startActivityForResult 方法实现对返回的数据进行处理。

Intent intent = 
new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//存放相机返回的图片
File file = new File(filePath);
if(file.exists()){file.delete()}
Uri uri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
startActivityForResult(intent1,TAKE_PHOTO);

2.调用图库
这里是使用Intent的Action参数Intent.ACTION_GET_CONTENT 来实现的

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
//选择图片格式
intent.setType("image/*");
intent.putExtra("return-data",true);
startActivityForResult(intent,CHOOSE_PHOTO);

(三)处理返回数据

调用onActivityResult 方法分别对于图库和相机,以及对于下一项介绍的图片剪裁后返回的图片进行处理
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            //处理图库返回
            case CHOOSE_PHOTO:
                if(resultCode == RESULT_OK){
                    photoZoom(data.getData());
                }
                break;
            //处理相机返回
            case TAKE_PHOTO:
                if(resultCode == RESULT_OK){
                    File file = new File(filePath);
                    photoZoom(Uri.fromFile(file));
                }
            //处理裁剪返回
            case PHOTO_RESULT:
                Bundle bundle = new Bundle();
                try {
                    bundle = data.getExtras();
                    if (resultCode == RESULT_OK) {
                        Bitmap bitmap = bundle.getParcelable("data");
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 75, new ByteArrayOutputStream());
                        //修改ImageView的图片
                        photoImage.setImageBitmap(bitmap);
                    }
                } catch (java.lang.NullPointerException e) {
                    e.printStackTrace();
                }
                break;
        }

(四)剪裁图片

通过Intent 调用com.android.camera.action.CROP 系统的剪裁功能。

    public void photoZoom(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        // aspectX aspectY 是宽高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // outputX outputY 是裁剪图片宽高
        intent.putExtra("outputX", 300);
        intent.putExtra("outputY", 130);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, PHOTO_RESULT);
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值