栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

 由于API较多  我们这里就不做多的介绍  可以查看官网 :android.hardware  |  Android Developershttps://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;
                       }
                   });
                }
            }
        });

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/336701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号