关键词不能为空

当前您在: 主页 > 英语 >

Android Camera2提升及调用详解

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-12 15:01
tags:

-

2021年2月12日发(作者:blueprint)


Camera2


详解




官方的说法:


Camera2 API


?



Supports 30fps full resolution with burst mode


支持


30fps


的全高清连拍



?



Supports change on manual camera settings between frame capture


支持帧之间的手动设置



?



Supports RAW image capture


支持


RAW

< br>格式的图片拍摄



?



Supports Zero Shutter Lag & Movie Snapshot


支持快门


0


延迟 以及电影速拍



?



Supports setting other manual camera device controls including level of


Noise Cancelling


支持相机其他方面的手动控制包括噪音消除的级别



?



TextureView


代替


SurfaceView


展示预览




还有部分新功能没有列出













Google


采用了


pipeline


(管道)的概念,将


Camera Device


相机设备和


Android


Device


安卓


设备连接起来,



android


Device


通过管 道发送


CaptureRequest


拍照请求给


Camera Device



Camera De vice


通过管道返回


CameraMetadata


数据给


Android Device


,这一切 建立在一个叫作


CameraCaptureSession


的 会话中。










下面是


camera2


包中的主要类:




其中


CameraManager


是所有相机设备(


CameraDevice


)的管理者,而每个


Cam eraDevice


自己会负责建立


CameraCaptur eSession


以及建立


CaptureRequest



CameraCharacteristics

< br>是


CameraDevice


的属性描述类,

< p>


CameraCharacteristics


中可以进行相机设备功能的详细设定(当然了,首先你得确定你的相机设备支持这些功


能 才行)。



类图中有着三个重要的


ca llback


,其中


eCallback



处理预览和拍照图片的工作,需要重点对待。







这些类是如何相互配合的?下面是简单的流程图:




1.



可以 看出调用


openCamera


方法后会回调

< br>allback


这个


方法,在该方法里重写


onOpened


函数。



2.




on Opened




< br>调



createCaptureSession





< p>




allback< /p>


方法。



3.




allback


中重写


onConfigured


方法,设置


setRep eatingRequest


方法(


也就是开启预览了


)。



4.



setRepeatingRequest


又会回调


eCallback


方法。



5.



重写


e Callback


中的



onCap tureCompleted


方法,


result


就是未经过处理的元数据了。



顺便提一下


onCaptureProgressed


方法很明显是在


Capture


过程中的,


也就是在


onCaptureCompleted


之前,所以,在这之前相对图像干什么 就看你的了,像美颜等


操作就可以在这个方法中实现了。



可以看出


Camera2


相机使用的逻辑还 是比较简单的,


其实就是


3



Callback


函数


的回调,先说一下:


setRepeatingRequest



capture


方法其实都是向相机设备发送


获取图像的请求 ,但是


capture


就获取那么一次,而

setRepeatingRequest


就是不停


的获取 图像数据,所以呢,使用


capture


就想拍照一样,图像就 停在那里了,但是


setRepeatingRequest


一 直在发送和获取,所以需要连拍的时候就调用它,然后在


onCaptureCompl eted

























setRepeat ingRequest


,只是你不处理数据就行了)
















调用流程


:


1.


获取


TextureView


对 象



mPreviewView=(TextureView) findViewById(eview);


faceTextureListener(this);//


eView


初始化完毕开始初始化相机并绑定


CameraI D



@SuppressWarnings(






@Override






public void onS urfaceTextureAvailable(SurfaceT


exture surface, int width, int height) {


CameraManager cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);










try {














String[] CameraIdList = eraIdList();















//


获取可用相机设备列表















CameraCharacteristics characteristics =



eraCharacteristics(CameraIdList[0]);














//


在这里可以通过


CameraChar acteristics


设置相机的功能


,

当然必须检查是否支持















(_SUPPORTED_HARDWARE_LEVEL);














//


就像这样















mera(CameraIdList[0],


mCameraDeviceStateCallback


,


mHandler);//


添加相机驱动的回调对象

< p>










} catch (CameraAccessException e) {














tackTrace();










}






}







@Override






public void onSurfaceTextureSizeChanged (SurfaceT


exture surface, int width, int height) {}







@Override






public boolean onSurfaceT


ext ureDestroyed(SurfaceTexture surface) {










return false;






}







@Override






public void onSurfaceTextureUpdated(SurfaceT


exture surface) {}


3.


获取相机驱动的回调

< p>
//


在相机打开时开启相机预览



allback


mCameraDeviceStateCallback


=


new


allback() {



@Overridepublicvoid onOpened(CameraDevice camera) {


try {



startPreview(camera);



}



catch (CameraAccessException e)



{



tackTrace(); }



}



@Override


publicvoid onDisconnected(CameraDevice camera) {}



@Override


publicvoid onError(CameraDevice camera, int error) {} };



4.

开启相机预览


//


创建


Sessi on


对象


,


获取图像抓取对象



private void startPreview(CameraDevice camera) throws CameraAccessException {



SurfaceTexture texture = faceTexture();


aultBufferSize(th(), ght());



Surface surface = new Surface(texture);



try {



mPreviewBuilder = CaptureRequest(TE_STILL_CAPTURE);



} catch (CameraAccessException e) {



tackTrace();



}




arget(surface);



CaptureSession((surface),


mSessionStateCallback


, mHandler); }


5.


通过


Session


抓取图片



private allback mSessionStateCallback = new


allback() {



@Override public void onConfigured(CameraCaptureSession session) {



try {



//


抓取图片



//e((),


mSessionCaptureCallback


, mHandler);



//


图像持续反馈



eatingRequest((),


mSessionCaptureCallback


, mHandler);//



} catch (CameraAccessException e) {



tackTrace();



}



}



@Override



public void onConfigureFailed(CameraCaptureSession session) {} };


n


回调优化图片



private eCallback mSessionCaptureCallback = new


eCallback() {



@Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest


request, TotalCaptureResult result) {


//TODO


保存图片



}



@Override public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest


request, CaptureResult partialResult){


//TODO


进行美颜等优化操作



}};


7.


通过


ImageReader

< p>
保存图片详情参考下面工具类




Camera2


工具类


:


package



;



import


t


;


import



;


import


ormat


;


import


eTexture


;


import


AccessException


;


import


CaptureSession


;


import


Characteristics


;


import


Device


;


import


Manager


;


import


Metadata


;


import


eRequest


;


import


aptureResult


;


import


ConfigurationMap


;


import



;


import


eader


;


import


nment


;


import


r


;


import


rThread


;


import


l


;


import



;


import



;


import


IntArray


;


import


e


;


import


eView


;


import


ayout


;


import



;


-


-


-


-


-


-


-


-



本文更新与2021-02-12 15:01,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/644109.html

Android Camera2提升及调用详解的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文