介紹
KCamera 是基于Camera2 API 進(jìn)行封裝可以靈活羊娃,快速的接入Camera庫(kù)淋样, 這里不介紹架構(gòu)設(shè)計(jì)實(shí)現(xiàn)嘹悼,主要介紹如果快速使用
支持功能
- 拍照
- 變焦
- 手動(dòng)對(duì)焦
- 曝光補(bǔ)償
- 獲取相機(jī)預(yù)覽數(shù)據(jù)
- 自定義相機(jī)參數(shù)
- 預(yù)覽畫面鏡像
Github:https://github.com/mm-cuckoo/KCamera
工程結(jié)構(gòu)
-
KCamera
: Camera2 API 的核心控制庫(kù) -
KGLCamera
: 是基于KCamera
庫(kù)實(shí)現(xiàn)的以GL為基礎(chǔ)的一些功能
這里沒(méi)有配置Maven排苍,需要下載源碼進(jìn)行自己打包枝笨, 打包方法不介紹
接入
使用這個(gè)Camera庫(kù)KCamera
這個(gè)類一定要先了解一下袁铐,這個(gè)類是控制Camera的入口。
預(yù)覽
預(yù)覽很簡(jiǎn)單横浑,只需要下面4步
- 創(chuàng)建預(yù)覽
View
剔桨, 可以是TextureView
也可是GLSurfaceView
- 實(shí)現(xiàn)
PreviewSurfaceProvider
接口,并將預(yù)覽View
和PreviewSurfaceProvider
進(jìn)行綁定 - 使用
PreviewRequest.createBuilder()
創(chuàng)建預(yù)覽Builder
- 創(chuàng)建
KCamera
實(shí)例并調(diào)用openCamera
方法啟動(dòng)預(yù)覽
上面簡(jiǎn)單幾步即可完成預(yù)覽徙融,下面介紹如何實(shí)現(xiàn)一個(gè)預(yù)覽
- 創(chuàng)建預(yù)覽
View
洒缀,詳細(xì)可以參考項(xiàng)目中CameraGLView
(GLView
代碼到項(xiàng)目中自行查看吧)
public class CameraGLView extends GLView {
.......
}
- 實(shí)現(xiàn)
PreviewSurfaceProvider
接口, 詳細(xì)可以參考項(xiàng)目中GLViewProvider
public class GLViewProvider implements PreviewSurfaceProvider {
......
}
- 使用
PreviewRequest.createBuilder()
創(chuàng)建預(yù)覽Builder
val backImageReader = PreviewYuvImageReader(backYuvSize, listener)
val builder = PreviewRequest.createBuilder()
.setPreviewSize(backPreviewSize) // 預(yù)覽數(shù)據(jù)分辨率
.openBackCamera() // 打開(kāi)后攝
.addPreviewSurfaceProvider(provider) // 設(shè)置預(yù)覽View provide
.setPictureSize(backPicSize, ImageFormat.YUV_420_888) // 設(shè)置拍照分辨率
.setFlash(FlashState.OFF) // 設(shè)置打開(kāi)時(shí)閃光燈
.setCustomerRequestStrategy(BackCustomerRequestStrategy()) // 設(shè)置自定義策略
.addSurfaceProvider(backImageReader) // 添加一路輸出圖像數(shù)據(jù), 可以是實(shí)時(shí)預(yù)覽數(shù)據(jù)欺冀,也可以是拍照數(shù)據(jù)
- 創(chuàng)建
KCamera
實(shí)例并調(diào)用openCamera
方法啟動(dòng)預(yù)覽,openCamera
需要兩個(gè)參數(shù)树绩,
PreviewRequest
: 啟動(dòng)相機(jī)的一些參數(shù),在第三步中已經(jīng)介紹
CameraStateListener
:使用過(guò)程中相機(jī)狀態(tài)的監(jiān)聽(tīng)
val builder = PreviewRequest.createBuilder() // 上面的builder
val kCamera: KCamera = KCamera(context)
kCamera.openCamera(builder.builder(), cameraListener)
功能介紹
API | 功能 |
---|---|
KCamera.takePic(final CaptureStateListener listener) | 拍照 |
KCamera.setZoom(int value) | 變焦設(shè)置(0 ~ 100) |
KCamera.setEv(int value) | 曝光設(shè)置 |
KCamera.setFocus(float touchX, float touchY, int afTouchViewWidth, int afTouchViewHeight) | 手動(dòng)對(duì)焦 |
KCamera.setCustomRequest(KCustomerRequestStrategy strategy) | 自定義相機(jī)參數(shù) |
GLView.setMirrorView(boolean isMirror) | 預(yù)覽畫面鏡像(這個(gè)功能是在GLView 中) |
下面單獨(dú)介紹一下拍照的使用:
實(shí)現(xiàn)拍照只要兩步:
- 實(shí)現(xiàn)拍照的
SurfaceProvider
并在拍照前在openCamera
時(shí)創(chuàng)建PreviewRequest
通過(guò)addSurfaceProvider
函數(shù)配置拍照SurfaceProvider
進(jìn)行配置,具體實(shí)現(xiàn)參考項(xiàng)目CaptureJPEGImageReader
- 使用
KCamera.takePic(CaptureStateListener)
函數(shù)進(jìn)行拍照隐轩,CaptureStateListener
是對(duì)拍照狀態(tài)的監(jiān)聽(tīng)
上面簡(jiǎn)單介紹功能饺饭,功能詳細(xì)使用方法參考項(xiàng)目中實(shí)現(xiàn)