内容 Camera1.0 Camera2.0 是否相同
权限 android.permission.CAMERA android.permission.CAMERA
布局 SurfaceView TextureView
实现接口 SurfaceHolder.Callback 1.surfaceCreated 2.surfaceChanged 3.surfaceDestroyed SurfaceTextureListener 1.onSurfaceTextureAvailable 2.onSurfaceTextureSizeChanged 3.onSurfaceTextureDestroyed 4.onSurfaceTextureUpdated
Camera参数(设置,查看) Camera.Parameters Camera.Size 查看:CameraCharacteristics中getCameraCharacteristics(CameraID)设置:CaptureRequest.Builder中void set(Key key, T value)举例:曝光:CaptureReqBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 2);
打开摄像头 surfaceCreated中Camera.open(CameraID) onSurfaceTextureAvailable中CameraManager.openCamera(CameraId,CameraDevice.StateCallback,Handler)
开始预览 Camera.startPreview() CaptureReqBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);CaptureReqBuilder.addTarget(Surface);Camera.createCaptureSession(Arrays.asList(surface),CaptureSessionStateCallback, Handler);
设置预览方向 Camera.setDisplayOrientation(degrees) 并没有直接设置预览方向的方法,但是TextureView本身是一个View,支持旋转、平移、缩放,再重写onMeasure方法
图像原始数据byte[]实时获取 Camera.PreviewCallback中onPreviewFrame(byte[],Camera) 1.onSurfaceTextureUpdated中使用TextureView的getBitmap()方法,但是这里获取到的是Bitmap对象,而我需要的是原始byte[],所以这个方法不适用。2.设置ImageReader.setOnImageAvailableListener监听,在onImageAvailable(ImageReader)通过回调传递的ImageReader.acquireLatestImage()方法获取到一个Image对象(别忘了close(),否则画面会卡住,停止刷新),然后Image.getPlanes()[0].getBuffer()返回了一个ByteBuffer对象,最后new byte[buffer.remaining()]即可得到原始图像的byte[]。别忘了CaptureReqBuilder.addTarget(ImageReader.getSurface()); 否则看不到效果
Camera图像预览尺寸大小设置 Camera.Parameters.setPreviewSize(width, height) TextureView. getSurfaceTexture()拿到SurfaceTexture()对象,再通过setDefaultBufferSize(width, height)进行设置。
将来获取到的图片的大小设置 Camera.Parameters.setPictureSize(width, height); ImageReader.newInstance(width, height,ImageFormat.YUV_420_888, MAX_IMAGES);
将来获取到的图片的格式设置 Camera.Parameters..setPictureFormat(ImageFormat.JPEG); ImageReader.newInstance(width, height,ImageFormat.YUV_420_888, MAX_IMAGES);

来源: http://blog.csdn.net/qq_21898059/article/details/52047598

1. Camera2是通过系统服务拿到CameraManager来管理camera设备对象,camera的一次预览、拍照都是向请求会话(CaptureSession.StateCallback,摄像头打开时由相机设备的输出surface组成)发送一次请求(CaptureRequest.Builder)。需要在它的回调onConfigured中进行处理,例如预览,如果不在此方法中写上CameraCaptureSession.setRepeatingRequest(mCaptureReqBuilder.build(), null, mHandler);那么预览就不会成功。

2. 此外,在创建会话,设置ImageReader监听,都需要传递一个Handler对象,这个Handler对象决定着这些会话、监听的回调方法会被在哪个线程中调用,如果传递的是NULL,那么回调会调用在当前线程。

闪关灯的控制方式

Camera API 1.0下
这句代码可以得到摄像头支持的闪光灯模式
List<String> supportedFlashModes = params.getSupportedFlashModes();
控制闪光灯的方法:
params.setFlashMode(Parameters.FLASH_MODE_TORCH );//开启闪光灯

API并没有详细说明。

我测试了Parameters.FLASH_MODE_TORCH 和FLASH_MODE_ON:

Parameters.FLASH_MODE_TORCH : 闪光灯常开

Parameters.FLASH_MODE_ON :    拍照时闪光灯才打开

Camera API 2.0下:
这句代码可以用来检测当前打开的摄像头是否支持闪光灯:
Boolean flashAvailable = cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
控制闪光灯的方法:
camerasession.setRepeatingRequest(mCameraBuilder.build(),null,null)

但是根据API文档的说明,需要注意的问题大概如下:

1. 只有当android.flash.info.available = = true 时这种控制闪光灯才有效。

2. 会被自动曝光模式(CONTROL_AE_MODE)中的设置给覆盖。

我测试了几项:

a) CONTROL_AE_MODE设置为OFF、ON_AUTO_FLASH、ON_AUTO_FLASH_REDEYE、ON_ALWAYS_FLASH时,上述闪光灯控制方式不能打开。

b) CONTROL_AE_MODE设置为ON或者不设置时,上述闪光灯控制方式能打开。

内容 Camera1.0 Camera2.0 是否相同
权限 android.permission.CAMERA android.permission.CAMERA
布局 SurfaceView TextureView
实现接口 SurfaceHolder.Callback 1.surfaceCreated 2.surfaceChanged 3.surfaceDestroyed SurfaceTextureListener 1.onSurfaceTextureAvailable 2.onSurfaceTextureSizeChanged 3.onSurfaceTextureDestroyed 4.onSurfaceTextureUpdated
Camera参数(设置,查看) Camera.Parameters Camera.Size 查看:CameraCharacteristics中getCameraCharacteristics(CameraID)设置:CaptureRequest.Builder中void set(Key key, T value)举例:曝光:CaptureReqBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 2);
打开摄像头 surfaceCreated中Camera.open(CameraID) onSurfaceTextureAvailable中CameraManager.openCamera(CameraId,CameraDevice.StateCallback,Handler)
开始预览 Camera.startPreview() CaptureReqBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);CaptureReqBuilder.addTarget(Surface);Camera.createCaptureSession(Arrays.asList(surface),CaptureSessionStateCallback, Handler);
设置预览方向 Camera.setDisplayOrientation(degrees) 并没有直接设置预览方向的方法,但是TextureView本身是一个View,支持旋转、平移、缩放,再重写onMeasure方法
图像原始数据byte[]实时获取 Camera.PreviewCallback中onPreviewFrame(byte[],Camera) 1.onSurfaceTextureUpdated中使用TextureView的getBitmap()方法,但是这里获取到的是Bitmap对象,而我需要的是原始byte[],所以这个方法不适用。2.设置ImageReader.setOnImageAvailableListener监听,在onImageAvailable(ImageReader)通过回调传递的ImageReader.acquireLatestImage()方法获取到一个Image对象(别忘了close(),否则画面会卡住,停止刷新),然后Image.getPlanes()[0].getBuffer()返回了一个ByteBuffer对象,最后new byte[buffer.remaining()]即可得到原始图像的byte[]。别忘了CaptureReqBuilder.addTarget(ImageReader.getSurface()); 否则看不到效果
Camera图像预览尺寸大小设置 Camera.Parameters.setPreviewSize(width, height) TextureView. getSurfaceTexture()拿到SurfaceTexture()对象,再通过setDefaultBufferSize(width, height)进行设置。
将来获取到的图片的大小设置 Camera.Parameters.setPictureSize(width, height); ImageReader.newInstance(width, height,ImageFormat.YUV_420_888, MAX_IMAGES);
将来获取到的图片的格式设置 Camera.Parameters..setPictureFormat(ImageFormat.JPEG); ImageReader.newInstance(width, height,ImageFormat.YUV_420_888, MAX_IMAGES);

来源: http://blog.csdn.net/qq_21898059/article/details/52047598

1. Camera2是通过系统服务拿到CameraManager来管理camera设备对象,camera的一次预览、拍照都是向请求会话(CaptureSession.StateCallback,摄像头打开时由相机设备的输出surface组成)发送一次请求(CaptureRequest.Builder)。需要在它的回调onConfigured中进行处理,例如预览,如果不在此方法中写上CameraCaptureSession.setRepeatingRequest(mCaptureReqBuilder.build(), null, mHandler);那么预览就不会成功。

2. 此外,在创建会话,设置ImageReader监听,都需要传递一个Handler对象,这个Handler对象决定着这些会话、监听的回调方法会被在哪个线程中调用,如果传递的是NULL,那么回调会调用在当前线程。

闪关灯的控制方式

Camera API 1.0下
这句代码可以得到摄像头支持的闪光灯模式
List<String> supportedFlashModes = params.getSupportedFlashModes();
控制闪光灯的方法:
params.setFlashMode(Parameters.FLASH_MODE_TORCH );//开启闪光灯

API并没有详细说明。

我测试了Parameters.FLASH_MODE_TORCH 和FLASH_MODE_ON:

Parameters.FLASH_MODE_TORCH : 闪光灯常开

Parameters.FLASH_MODE_ON :    拍照时闪光灯才打开

Camera API 2.0下:
这句代码可以用来检测当前打开的摄像头是否支持闪光灯:
Boolean flashAvailable = cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
控制闪光灯的方法:
camerasession.setRepeatingRequest(mCameraBuilder.build(),null,null)

但是根据API文档的说明,需要注意的问题大概如下:

1. 只有当android.flash.info.available = = true 时这种控制闪光灯才有效。

2. 会被自动曝光模式(CONTROL_AE_MODE)中的设置给覆盖。

我测试了几项:

a) CONTROL_AE_MODE设置为OFF、ON_AUTO_FLASH、ON_AUTO_FLASH_REDEYE、ON_ALWAYS_FLASH时,上述闪光灯控制方式不能打开。

b) CONTROL_AE_MODE设置为ON或者不设置时,上述闪光灯控制方式能打开。

Camera1.0和Camear2.0的区别相关推荐

  1. 127.0.0.1和0.0.0.0和localhost的区别

    127.0.0.1和0.0.0.0和localhost的区别 127.0.0.1 172.0.0.1是本地还回地址,专供自己访问自己,速度快(不用经过整个协议栈),永远都不能出现在主机外部的网络中,所 ...

  2. http与https的区别,http 1.0与1.1的区别

    Http与Https的区别: HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 标准端口是80 , ...

  3. 计算机usb接口充电效率差,usb2.0和3.0的区别 从传输速度和充电效率等来区别

    在选择电脑主板的时候,一般都会看一下主板的USB接口是2.0还是3.0.很多人都知道3.0应该比2.0要好,那么具体好在哪里,usb2.0和usb3.0的区别有哪些?下面将从传输速度.充电效率和接线接 ...

  4. VC++6.0和VC++2010的区别

    VC6.0和VS2010最大的区别在于默认的字符集,VC6.0默认的字符集为ANSI,而VS2010默认的字符集为UNICODE. 这就造成了,VC6和VS2010在处理字符问题上的不同.     首 ...

  5. 使用 okHttp 3.0 版本前后的两点区别.(不要入坑哦)

    OkHttp 优点: OkHttp会从很多常用的连接问题中自动恢复.如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,会自动尝试下一个IP.OkHttp还处理了代理服务器问题和SSL握手失 ...

  6. 浅谈JQuery中$('.classname').get(0); $('.classname').eq(0); $('.classname')[0]三者的区别

    举例浅谈JQuery中$('.classname').get(0); $('.classname').eq(0); $('.classname')[0]三者的区别 demo Dom结构: <di ...

  7. 硬件知识:USB3.0和USB2.0的区别,看完你就懂了!

    1.USB的概念介绍 USB是计算机公司和通信公司在1994年联合制定的新一代接口标准,全称为通用串行总线 (Universal Serial Bus,USB) .USB 总线作为一种高速串行总线,其 ...

  8. vue2.0 $router和$route的区别

    转载自  vue2.0 $router和$route的区别 在vue2.0里页面参数是 this.$route.query或者 this.$route.params 接收router-link传的参数 ...

  9. 【飞秋】WF3.0和4.0区别介绍

    最近要研究下WF4.0的相关内容,将自己认识的.理解的写下来与大家共勉,有兴趣的朋友可以一起探讨一下. 相对于之前的3.0.3.5中的WorkFlow来说,4.0进行了很大的变动,包括流程设计工具.支 ...

最新文章

  1. R语言使用R原生函数plot和lines可视化线图、并使用lty参数自定义线条类型、lwd自定义设置线条的粗细、col参数自定义线条颜色(Change R base plot line types)
  2. Android No static field XXX of type I in class Lcom/XXX/R$id错
  3. dede织梦背景经常使用标签
  4. 用户注册 - 判断用户名存在
  5. java堆内存 数据结构_JAVA内存区域
  6. elasticsearch体验(一.初识elasticsearch)
  7. 图像匹配,基于深度学习DenseNet实现以图搜图功能
  8. 义务劳动: CISA的翻译
  9. 计算机术语翻译的最烂,我国计算机名词的翻译现状和建议
  10. ssm框架中mysql的分页_SSM框架中mapper层,增删改查,如何实现
  11. 基于OptiSystem的高速远距离光纤通信系统研究
  12. 拉线自动行走机器人_架空输电线路自动巡线机器人
  13. LeetCode常见题型——背包问题
  14. mars java创业_Mars-java
  15. 事件委托(事件代理)
  16. 基于单片机的负离子空气净化系统设计
  17. ORA-1555,oracle读一致性
  18. python之简单的文件处理
  19. WMS系统(一)成品出库
  20. 嵌入式计算机系统简述,嵌入式系统简述

热门文章

  1. 3D建模的主要学习内容是什么
  2. 第五届“强网杯”全国网络安全挑战赛 - 青少年专项赛 crypto
  3. 【转】漫谈iOS程序的证书和签名机制
  4. 鸿蒙os息屏显示,ROG游戏手机2宣布;鸿蒙OS UI界面/功能模块曝光…
  5. 怎么取消苹果手机自动续费_手机QQ会员每月自动续费,怎么关闭
  6. 详解PS钢笔工具的使用技巧
  7. 如何利用微博进行引流?
  8. elasticseach 增删改查 ,包括各种组合查询(全)
  9. VSCode 快捷键及通用插件推荐
  10. android 扫描 相册二维码图片_什么app可以导出图片中的文字?