当前位置: 首页 > news >正文

wordpress中文站cn网站建设 百度云盘

wordpress中文站cn,网站建设 百度云盘,建立微信小程序,网络行业做什么挣钱Android Camera2 Android Camera2 是 Android 系统中用于相机操作的一套高级应用程序接口#xff08;API#xff09;#xff0c;它取代了之前的 Camera API。以下是关于 Android Camera2 的一些主要信息#xff1a; 主要特点#xff1a; 强大的控制能力#xff1a;提供…Android Camera2 Android Camera2 是 Android 系统中用于相机操作的一套高级应用程序接口API它取代了之前的 Camera API。以下是关于 Android Camera2 的一些主要信息 主要特点 强大的控制能力提供对相机更深入的控制允许开发者精确设置对焦模式、曝光模式、快门速度、白平衡、增益等各种拍摄参数能够满足复杂的拍摄需求例如专业摄影应用或对图像质量有较高要求的场景。多流输出支持单个相机设备可以同时输出多个流每个流针对不同的使用场景进行了优化如预览、拍照、视频录制或图像分析等。这使得开发者可以根据应用的具体需求灵活地获取和处理不同类型的图像数据。高效的数据处理支持高效的零复制连拍和视频流功能能够快速地获取和处理连续的图像数据提高了相机的响应速度和数据处理效率。核心类与组件 CameraManager用于管理系统中的相机设备提供了获取相机设备列表、打开指定相机以及获取相机特性等方法。开发者可以通过它来检测系统中可用的相机并获取相机的相关信息以进行后续的操作。CameraDevice代表系统中的摄像头硬件设备负责建立与相机的连接并管理相机的状态。它可以创建 CaptureSession捕获会话以及 CaptureRequest捕获请求是与相机硬件进行交互的核心类。CameraCharacteristics描述了特定相机设备所支持的各种特性通过 CameraManager 获取。开发者可以根据这些特性来判断相机的能力例如是否支持自动对焦、是否支持特定的分辨率等以便在应用中进行相应的设置和处理。CameraCaptureSession是应用程序与相机设备之间进行数据传输和交互的会话。当程序需要预览、拍照或录制视频时都需要创建一个 CameraCaptureSession。它管理着 CaptureRequest 的队列将开发者设置的拍摄参数传递给相机设备并接收相机返回的图像数据。CaptureRequest 和 CaptureRequest.BuilderCaptureRequest 代表了一次捕获请求用于描述捕获图片或视频的各种参数设置如对焦模式、曝光模式、分辨率等。CaptureRequest.Builder 则负责生成 CaptureRequest 对象方便开发者设置各种参数。使用步骤 获取 CameraManager首先需要获取 CameraManager 对象这是进行所有相机操作的前提。可以通过 Context.getSystemService(Context.CAMERA_SERVICE) 方法来获取 CameraManager。打开相机设备使用 CameraManager 的 openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler) 方法打开指定的摄像头。其中cameraId 是要打开的摄像头的标识符callback 用于监听摄像头的状态变化handler 表示执行回调的线程。创建 CameraCaptureSession当摄像头打开后通过 CameraDevice.createCaptureSession(ListSurface outputs, CameraCaptureSession.StateCallback callback, Handler handler) 方法创建 CameraCaptureSession。outputs 是一个包含所有需要从该摄像头获取图片的 Surface 的列表callback 用于监听会话的创建过程handler 表示执行回调的线程。创建 CaptureRequest调用 CameraDevice.createCaptureRequest(int templateType) 方法创建 CaptureRequest.Builder其中 templateType 可以是 TEMPLATE_PREVIEW预览、TEMPLATE_RECORD拍摄视频、TEMPLATE_STILL_CAPTURE拍照等。然后使用 CaptureRequest.Builder 设置拍照的各种参数。开始预览或拍照调用 CameraCaptureSession.setRepeatingRequest() 方法开始预览或调用 capture() 方法进行拍照。拍照的优先级比预览的优先级高如果需要多次拍照可以多次调用 capture() 方法。支持的版本和兼容性Android Camera2 从 Android 5.0API 级别 21开始支持。但需要注意的是虽然 Android 5.0 及更高版本的设备支持 Camera2但部分设备可能并不支持所有的 Camera2 功能。在实际开发中需要根据设备的具体特性和支持情况进行适配和处理。 相比Camera API技术优势 Android Camera2 与 Camera API 相比具有以下优势 功能与控制方 更多的手动控制选项 Camera2 提供了丰富的手动设置功能如曝光时间、ISO 感光度、对焦模式、焦距等参数都可以由开发者手动设置和精确调整能够满足专业摄影或对图像质量有较高要求的场景。而 Camera API 的手动控制功能非常有限通常只能实现简单的自动调节拍摄。例如在光线复杂的环境中使用 Camera2 可以根据实际需求手动调整曝光时间以获得更准确的曝光效果避免画面过亮或过暗在拍摄特写镜头时可以手动设置对焦模式和焦距确保主体清晰。支持 RAW 图像捕获Camera2 支持 RAW 格式的图像捕获RAW 格式的图像包含了更多的原始图像信息为后期处理提供了更大的空间和更高的灵活性可以让用户在后期对图像的色彩、对比度、锐度等进行更精细的调整。相比之下Camera API 通常只能获取经过压缩和处理的图像格式丢失了很多原始信息14。高速连拍模式Camera2 支持高速连拍功能能够以更快的速度连续拍摄多张照片这对于捕捉快速运动的物体或瞬间的精彩场景非常有帮助。而在 Camera API 中实现连拍功能相对较为困难且连拍速度和效果可能不尽如人意4。性能优化方面 并行处理能力Camera2 支持并行拍摄和预览在同时进行多个操作时表现更好可以在预览的同时进行拍照、录像等操作并且不会相互干扰提高了相机的使用效率和响应速度。而在 Camera API 中切换不同的拍摄模式如从预览模式切换到拍照模式可能会比较耗时影响用户体验1。高效的数据处理Camera2 采用了更高效的数据处理方式能够快速地获取和处理图像数据减少了数据传输和处理的延迟。例如在拍摄视频时Camera2 可以更流畅地获取和编码视频数据降低了视频的卡顿现象5。架构与兼容性方面 更灵活的架构Camera2 的架构更加灵活将相机系统塑造为一个管道该管道可按照 1:1 的基准将传入的帧捕获请求转化为帧并将图像数据的缓冲区输出到设置的目的 Surface 中。这种架构使得开发者可以更方便地定制和扩展相机的功能实现各种复杂的拍摄需求。更好的兼容性虽然 Camera API 在早期的 Android 版本中广泛使用但随着 Android 系统的不断升级Camera2 逐渐成为了 Android 相机功能的主要 API。新的 Android 版本会对 Camera2 进行更好的优化和支持而 Camera API 可能会逐渐被淘汰使用 Camera2 可以更好地保证应用在不同 Android 版本上的兼容性3。设备特性支持与检测方面 设备能力检测通过 CameraCharacteristics 类Camera2 可以方便地检查设备相机的各种特性和功能开发者可以根据设备的支持情况来动态地调整相机的设置和功能提高了应用的适应性和稳定性。例如在应用启动时可以先检测设备是否支持手动对焦功能如果支持则开启手动对焦选项否则隐藏该选项避免出现功能不可用的情况。支持更多新硬件特性随着手机硬件的不断发展新的相机硬件特性不断涌现Camera2 能够更好地支持这些新特性如更高的分辨率、更快的对焦速度、更好的低光性能等为用户提供更好的拍摄体验。 Android Camera2 RAW图像捕获 要使用 Android Camera2 进行 RAW 图像捕获你可以按照以下步骤进行操作 检查设备支持首先确保你的设备支持 Camera2 API 并且支持 RAW 图像捕获。你可以通过查询设备的 CameraCharacteristics 来获取相关信息123。获取 CameraManager通过Context.getSystemService(Context.CAMERA_SERVICE)获取 CameraManager 实例123。打开相机设备使用 CameraManager 的openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)方法打开相机设备。你需要指定要打开的相机 ID 以及相应的回调和处理程序123。创建 CaptureRequest.Builder创建一个 CaptureRequest.Builder 对象并设置相关的参数如对焦模式、曝光模式等。同时将图像格式设置为ImageFormat.RAW_SENSOR以指定捕获 RAW 图像1。创建 CameraCaptureSession使用 CameraDevice 的createCaptureSession(ListSurface outputs, CameraCaptureSession.StateCallback callback, Handler handler)方法创建一个 CameraCaptureSession。将包含 RAW 图像的 Surface 添加到输出列表中1。开始捕获调用 CameraCaptureSession 的capture(CaptureRequest request, CameraCaptureSession.CaptureCallback callback, Handler handler)方法开始捕获 RAW 图像。你可以指定相应的回调来处理捕获结果1。处理 RAW 图像数据在 CaptureCallback 的onCaptureCompleted方法中你将接收到包含 RAW 图像数据的 CaptureResult 对象。你可以从 CaptureResult 中获取图像数据并进行相应的处理或保存。 示例代码如下 import android.content.Context; import android.graphics.ImageFormat; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCaptureSession; import android.hardware.camera2.CameraCharacteristics; import android.hardware.camera2.CameraDevice; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CaptureRequest; import android.os.Handler; import android.os.HandlerThread; import android.util.Log; import android.view.Surface;public class RawImageCapture {private CameraManager cameraManager;private String cameraId;private CameraDevice cameraDevice;private CameraCaptureSession cameraCaptureSession;private CaptureRequest.Builder captureRequestBuilder;public void startRawImageCapture(Context context) {// 获取CameraManagercameraManager (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);try {// 获取相机设备IDcameraId cameraManager.getCameraIdList()[0];// 打开相机设备cameraManager.openCamera(cameraId, new CameraDevice.StateCallback() {Overridepublic void onOpened(CameraDevice camera) {cameraDevice camera;createCaptureSession();}Overridepublic void onDisconnected(CameraDevice camera) {cameraDevice.close();}Overridepublic void onError(CameraDevice camera, int error) {cameraDevice.close();}}, null);} catch (CameraAccessException e) {e.printStackTrace();}}private void createCaptureSession() {try {// 创建CaptureRequest.BuildercaptureRequestBuilder cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);captureRequestBuilder.addTarget(new Surface(ImageFormat.RAW_SENSOR));// 创建CameraCaptureSessioncameraDevice.createCaptureSession(Arrays.asList(new Surface(ImageFormat.RAW_SENSOR)), new CameraCaptureSession.StateCallback() {Overridepublic void onConfigured(CameraCaptureSession session) {cameraCaptureSession session;startCapture();}Overridepublic void onConfigureFailed(CameraCaptureSession session) {}}, null);} catch (CameraAccessException e) {e.printStackTrace();}}private void startCapture() {try {cameraCaptureSession.capture(captureRequestBuilder.build(), new CameraCaptureSession.CaptureCallback() {Overridepublic void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) {// 处理RAW图像数据Log.d(RawImageCapture, RAW image captured);}}, null);} catch (CameraAccessException e) {e.printStackTrace();}} } 如何对接Android Camera2 大牛直播SDK前几年在做Android平台RTMP推送和轻量级RTSP服务的时候实际上就已经支持了Camera2的采集和数据投递考虑到目前5.0以下版本的设备越来越少后面的GB28181设备接入模块更是以Camera2的demo为准。 Camera2数据回调并投递到底层jni示例代码如下 /** Camera2MainActivity.java* Author:daniusdk.com* WeChat: xinsheng120*/ Override public void onCameraImageData(Image image) {Image.Plane[] planes image.getPlanes();if (image.getFormat() ! ImageFormat.YUV_420_888) {Log.i(TAG, image format is not YUV_420_888, format: image.getFormat());return;} else {// Log.i(TAG, image format is YUV_420_888, format: image.getFormat());}int w image.getWidth(), h image.getHeight();int y_offset 0, u_offset 0, v_offset 0;Rect crop_rect image.getCropRect();if (crop_rect ! null !crop_rect.isEmpty()) {w crop_rect.width();h crop_rect.height();y_offset crop_rect.top * planes[0].getRowStride() crop_rect.left * planes[0].getPixelStride();u_offset (crop_rect.top / 2) * planes[1].getRowStride() (crop_rect.left / 2) * planes[1].getPixelStride();v_offset (crop_rect.top / 2) * planes[2].getRowStride() (crop_rect.left / 2) * planes[2].getPixelStride();;// Log.i(TAG, crop w: w h: h y_offset: y_offset u_offset: u_offset v_offset: v_offset);}int scale_w 0, scale_h 0, scale_filter_mode 0;scale_filter_mode 3;int rotation_degree cameraImageRotationDegree_;if (rotation_degree 0) {Log.i(TAG, onCameraImageData rotation_degree 0, may need to set orientation_ to 0, 90, 180 or 270);return;}for (LibPublisherWrapper i : publisher_array_)i.PostLayerImageYUV420888ByteBuffer(0, 0, 0,planes[0].getBuffer(), y_offset, planes[0].getRowStride(),planes[1].getBuffer(), u_offset, planes[1].getRowStride(),planes[2].getBuffer(), v_offset, planes[2].getRowStride(), planes[1].getPixelStride(),w, h, 0, 0,scale_w, scale_h, scale_filter_mode, rotation_degree);}总结 Android Camera2 API 是从 Android 5.0Lollipop开始引入的相对Camera API优势非常明显如果需要通过Android平台采集视频数据在设备支持的前提下建议尽可能用Camera2做数据采集。
http://www.hkea.cn/news/14352567/

相关文章:

  • 网站开发基本构成常州企业自助建站系统
  • 网站没权重网站建设翻译插件
  • 外贸人自己搭建外贸网站wordpresswordpress分销
  • 商业网点建设开发中心网站机械加工网站大全
  • 怀化市鹤城区建设局网站网站被做跳转怎么办
  • 宿迁建设局网站拆除备案河北省建设安全监督站的网站
  • 个人网站的制作模板做网站公示
  • 住房和城乡建设部网站质保金商品管理系统
  • 如何c2c网站建设手机企业网站设计理念
  • 中国做的比较好的网站快速搭建网站框架
  • 财务软件费用计入什么科目网站优化软件费用
  • 如何制作网站模板怎样营销网站建设
  • 网站跳转怎么做地名网站建设方案
  • 优质的成都网站建设推广worldpress英文网站建设
  • 到哪里建网站使用网站模板侵权吗
  • 网页设计入门软件有哪些外贸网站建设seo优化
  • 注册公司网站流程建设银行网站适用浏览器
  • google 网站营销国外优秀的网站
  • ftp 企业网站网站开发公司如何拓展业务
  • wordpress密码访问佛山网站页面优化
  • sae 企业网站山东做网站公司有哪些
  • 网站的性能需求免费购物网站源码
  • 可以拿自己电脑做网站主机温州阀门网站建设
  • 如何做网站的主页阿里云做的网站程序员
  • 网站建设内容的重点小程序推广费用一个月需要多少钱
  • 建设部网站施工员查询wordpress注册协议
  • 竹中建设官方网站成都网站建设创新互联
  • 辽宁省住房和城乡建设厅网站换了学seo网站推广好吗
  • 可以做婚礼视频的网站网站开发最严重的问题
  • 重庆seo整站优化做分析仪器推广的网站