调用摄像头拍照和选择照片

作者: 大话程序 | 来源:发表于2016-05-25 09:50 被阅读718次

调用摄像头拍照


public class MainActivity extends Activity {

    public static final int TAKE_PHOTO = 1;

    public static final int CROP_PHOTO = 2;

    private Button takePhoto;

    private Button chooseFromAlbum;

    private ImageView picture;

    private Uri imageUri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //根据组件ID拿取组件对象
        takePhoto = (Button) findViewById(R.id.take_photo);
        chooseFromAlbum = (Button) findViewById(R.id.choose_from_album);
        picture = (ImageView) findViewById(R.id.picture);
        
        takePhoto.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建File对象,用于存储拍照后的照片,存储在了SD卡的根目录下
                File outputImage = new File(Environment.getExternalStorageDirectory(),
                        "output_image.jpg");
                try {
                    if (outputImage.exists()) {
                        outputImage.delete();
                    }
                    outputImage.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //将File对象转换成Uri对象,标识照片的唯一地址
                imageUri = Uri.fromFile(outputImage);
                //创建意图对象(照相机启动程序)
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                //指定图片的输出地址
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                //启动照相机程序实现拍照,要求返回值
                startActivityForResult(intent, TAKE_PHOTO);
            }
        });
    }

    //当启动的程序销毁时,回调此方法
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //通过请求值来实现不同的逻辑
        switch (requestCode) {
        case TAKE_PHOTO:
            if (resultCode == RESULT_OK) {
                //创建意图对象(实现照片剪切功能)
                Intent intent = new Intent("com.android.camera.action.CROP");
                //设置Intent对象的属性
                intent.setDataAndType(imageUri, "image/*");
                intent.putExtra("scale", true);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                //启动图片剪切程序,要求返回值
                startActivityForResult(intent, CROP_PHOTO);
            }
            break;
        case CROP_PHOTO:
            if (resultCode == RESULT_OK) {
                try {
                    //调用BitmapFactory的decodeStream()方法将照片解析成Bitmap对象
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver()
                            .openInputStream(imageUri));
                    //设置到ImageView中显示出来
                    picture.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
            break;
        default:
            break;
        }
    }

}

从相册中选择照片


从相册中选择一张照片,然后进行裁剪再存储起来

添加一个按钮,设置点击逻辑

chooseFromAlbum.setOnClickListener(new OnClickListener() {                    
    @Override                                                                 
    public void onClick(View v) {  
        //存储图像文件                                           
        File outputImage = new File(Environment.getExternalStorageDirectory(),
                "output_image.jpg");                                          
        try {                                                                 
            if (outputImage.exists()) {                                       
                outputImage.delete();                                         
            }                                                                 
            outputImage.createNewFile();                                      
        } catch (IOException e) {                                             
            e.printStackTrace();                                              
        }                                                                     
        imageUri = Uri.fromFile(outputImage);                                 
        Intent intent = new Intent("android.intent.action.GET_CONTENT");      
        intent.setType("image/*");                                            
        intent.putExtra("crop", true);                                        
        intent.putExtra("scale", true);                                       
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);      
        //启动相册程序,要求返回值,传入的请求码是CROP_PHOTO,选中以后可直接实现图像裁剪功能             
        startActivityForResult(intent, CROP_PHOTO);                           
    }                                                                         
});                                                                           

相关文章

  • 调用摄像头拍照和选择照片

    调用摄像头拍照 从相册中选择照片 从相册中选择一张照片,然后进行裁剪再存储起来 添加一个按钮,设置点击逻辑

  • 1.13 ionic3入门——调用摄像头

    在实际开发,App经常需要调用摄像头进行拍照,或者从相册中选择照片,以下就是ionic调用手机摄像头的步骤(1)引...

  • Ionic系列—调用摄像头拍照和选择图库照片功能的实现

    1、需求描述 最近要做一个功能就是调用摄像头拍照,然后上传照片的功能,或者直接打开图库选择照片然后上传。 2、准备...

  • 【总结】2017.01.10

    2017.01.10 - 计划 调用摄像头拍照取景 完善打卡功能 外包项目开发文档 - 实际完成 调用摄像头拍照取...

  • H5前端调用Android拍照功能

    JS调用Android摄像头拍照 产品经理要求H5要实现直接调用原生摄像头完成拍照功能: 一开始也是糊涂,我们前端...

  • RN与Android原生交互

    场景:在RN界面中需要调用原生的拍照和选择相册功能,将拍照或者选择的照片的路径回传给RN 步骤如下: 1、RN的界...

  • 项目需求-隐蔽拍照

    需求: 隐蔽拍照,没有预览界面打开这个activity直接调用前置摄像头“咔嚓”给你来张照片不能有声音、闪光灯,总...

  • App拍照和选择图片的最佳解决方案

    一、一行代码实现拍照或选择照片 分别是拍照、选择照片、拍照裁剪和选择照片裁剪: 二、 具体实现 2.1 定义回调接...

  • 使用js调用摄像头拍照

    使用js调用摄像头拍照 在一些浏览器里已经可以使用web api调用摄像头功能了。基于此可以经行拍照摄像功能,网上...

  • CameraX前置摄像头拍照镜像问题记录

    CameraX 拍照时遇到一个问题、记录一下 打开相机调用前置摄像头拍照 ,设置前置摄像头左右镜像。避免拍照出来预...

网友评论

本文标题:调用摄像头拍照和选择照片

本文链接:https://www.haomeiwen.com/subject/rrxtdttx.html