在学习这个模块之前必须要对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();//通过这个承载对象获取holdercamera = 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() {@Overridepublic 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() {@Overridepublic void onClick(View v) {if (camera == null || isPreview == false){Log.e("TAG", "相机没打开 或者是 未开启预览 " );}else {//开始拍照parameters.setRotation(90);camera.takePicture(null, null, new Camera.PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {//创建位图Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);//为imageView控件添加图片image.setImageBitmap(bitmap);//继续回到预览状态camera.startPreview();isPreview = true;}});}}});

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

  1. Android开发之调用相机拍照与本地图库选择图片

    引用链接 Android开发之调用相机拍照与本地图库选择图片 Android调用相机实现拍照功能 部分截图 引言 小项目有一个访问相册的需求,在网上查找得到两位大神博客指点,但博客发布时间过旧,难免因 ...

  2. android代码调用相机,Android如何调用系统相机拍照

    本文实例为大家分享了Android调用系统相机拍照的具体代码,供大家参考,具体内容如下 /** * 调用系统相机 */ private void takePhoto() { Uri uri = nul ...

  3. Android 7.0 获取相机拍照图片,适配三星手机拍照,解决三星手机拍照屏幕旋转,判断设备是否有摄像头

    方法1 新建/res/xml/file_paths: <?xml version="1.0" encoding="utf-8"?> <path ...

  4. Android 调起系统相机拍照

    概述 比奇小说网 m.biqi.org 最近在看 nanChen 写的图片选择器 ImagePicker,感觉写得很不错,也打算把从中学到的东西写下来.很多时候,遇到一个好的框架能够降低开发成本这是好 ...

  5. 调用Android系统自带相机拍照,从相册中获取图片

    一,前言: 在日常的手机应用开发过程中,经常会遇到上传图片的需求,像上传头像之类的,这就需要调用系统的相机,相册获取照片.但是在Android 系统7.0之后认为这种操作是不安全的,这篇文章主要就是记 ...

  6. Android基础---学习历程【上课用到的资源---学期!汇总!整理】【课本源码、课后习题答案、上课课件与录播】

    专业课 名:Android开发基础A      2020年 上半年[大二下学期]学的. 目   录 推荐博客 学习帮助文档(必看) 课本(Android 移动开发基础 案例教程) 课本源码and课后习 ...

  7. Android使用CameraX打开相机拍照简单使用

    1.首先是效果图 2.布局及依赖 布局: <?xml version="1.0" encoding="utf-8"?> <androidx.c ...

  8. Android手机调用系统相机拍照、裁剪以及获取Url上传图片

    前言 最近一个人在公司搞独立开发,遇到问题只能自己解决,虽然过程比较坎坷,但是收获还是颇多的,一个人也是要坚强滴,最近弄用户的头像遇到了一些小问题,虽然上一款应用有头像上传,但是发现了其中的一些小问题 ...

  9. Android WebView中打开相机拍照和选择相册

    一般在项目中与js交互,可能会遇到上传文件图片等操作,避免不了一些坑,下面简单说一下,Android 在不同版本中webView调用相机,选择相册的方法是不一样的,3.0以下的调用 public vo ...

最新文章

  1. java基础 -- 数据类型,基本程序结构
  2. Nginx负载均衡实现之四层与七层负载
  3. 左神算法:单调栈结构(Java版)
  4. java.util.logging.Logger基础教程
  5. Angular HttpClient.get的实现单步调试
  6. 你在学校我安排了你没有做到最多凶你一顿,在公司不一样,直接得让走人!...
  7. Leetcode: Kth Largest Element in an Array
  8. th标签能包裹select吗_电影《八佰》过后,他能摘掉马思纯前男友标签了吗?
  9. DatagridView 常用功能代码
  10. django 1.8 官方文档翻译: 6-6-2 如何使用WSGI 部署
  11. pycharm中tensorflow代码不能自动补全或import红线问题解决
  12. PHP实现今天是星期几的几种写法
  13. Visual Studio中实用工具VAssistX
  14. linux下载flink安装包
  15. 找出不大于n的最大质数
  16. 硬盘主分区和逻辑驱动器的区别
  17. win10系统编辑服务器在哪里设置密码,技术编辑处置win10系统忘记登录密码的设置技巧...
  18. 【陈工笔记】# 如何用WPS演示给PPT加水印 #
  19. 分销商城系统核心功能模块
  20. JavaScript常用的工具函数,不全面大家补充哦

热门文章

  1. easypoi动态设置列宽
  2. matlab求逆矩阵(分数表示)
  3. 使用Jest测试JavaScript (入门篇) 1
  4. 旷视科技Face++联手vivo掀起美学革命 AI智能助推vivo X23全方位进阶
  5. x-forward-for科普
  6. 小米路由器怎么设置?小编教你设置小米路由器的方法
  7. 【步态识别】GaitEdge超越普通的端到端识别《GaitEdge: Beyond Plain End-to-end Gait Recognition for Better Practicality》
  8. 【CSS】CSS 规避脱标之两种用法
  9. linux命令的理解
  10. 联通宽带路由器的管理地址和管理员密码