android基础学习之相机拍照部分

10 篇文章 0 订阅
8 篇文章 0 订阅

在学习这个模块之前必须要对android有关于相机拍照的API有所了解  , 这个模块的API有两部分  一部分就是Camera 还有一部分 是Camera2 好像androidX包里面还有一个CameraX , 但是 我们只能从最简单的来  就看android Camera包吧  我们线了解了解它的结构

 由于API较多  我们这里就不做多的介绍  可以查看官网 :android.hardware  |  Android Developersicon-default.png?t=L9C2https://developer.android.google.cn/reference/android/hardware/package-summary

 

开发步骤:

  1. 首先 , 需要获取 相机对象实例 , 可以通过官网提供的open方法获取 
  2. 还需要一个预览视图的容器(我的理解)术语来说就是需要一个表面 Sufarce
  3. 可以通过 相机对象 的 setPreviewDisplay方法来设置视图显示  该方法需要一个参数 就是Sufarceholder 对象  
  4. 通过sufarce对象获取Sufarceholder 并设置Sufarceholder;
  5. 可以设置一下相机的参数 可以通过Camera.Parament这个类来设置
  6. 调用startPreView方法开启预览
  7. 在预览的状态下 调用TakePicture方法来实时拍照并获取拍照的图片 ;

 代码:

 开启预览和参数配置

SurfaceView surface = (SurfaceView) findViewById(R.id.sf); //获取视频承载对象

SurfaceHolder holder = surface.getHolder();//通过这个承载对象获取holder
 camera = Camera.open();//使用Carmera类的open方法调用摄像头 这个方法会返回一个camera对象
 camera.setDisplayOrientation(90);
//设置相机的参数
Camera.Parameters parameters = camera.getParameters();
//设置相机信息

parameters.setPictureSize(400 , 400);//设置该相机拍摄的照片的大小
parameters.setPictureFormat(ImageFormat.JPEG);//设置相机拍照的格式
//开始预览
startPreview.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //判断相机对象是否被实例化
        if (camera!=null){
            try {
                camera.setPreviewDisplay(holder);//设置实时预览 --- 预览显示

                camera.startPreview();//开启预览
                isPreview = true ;

            } catch (IOException e) {
                e.printStackTrace();
            }
        }else {
            new IllegalArgumentException("相机为打开");
        }

    }
});
开始拍照
        //设置拍照按钮的监听事件

        startTakePicture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (camera == null || isPreview == false){
                    Log.e("TAG", "相机没打开 或者是 未开启预览 " );
                }else {
                    //开始拍照
                    parameters.setRotation(90);
                   camera.takePicture(null, null, new Camera.PictureCallback() {
                       @Override
                       public void onPictureTaken(byte[] data, Camera camera) {
                           //创建位图
                           Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

                           //为imageView控件添加图片
                           image.setImageBitmap(bitmap);
                           //继续回到预览状态
                           camera.startPreview();
                           isPreview = true;
                       }
                   });
                }
            }
        });

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值