日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Camera2 拍照(四)——对焦模式

發布時間:2024/4/17 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Camera2 拍照(四)——对焦模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文:Android Camera2 拍照(四)——對焦模式

本篇將重點介紹使用Camera2 API進行手動對焦的設置,以及在手動對焦與自動對焦模式之間切換。

一、手動對焦響應事件

首先我們要實現點擊preview區域進行手動對焦,這通過對TextureView注冊touch事件實現。

mTextureView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {int actionMasked = MotionEventCompat.getActionMasked(event);int fingerX, fingerY;int length = (int) (getResources().getDisplayMetrics().density * 80);switch (actionMasked) {case MotionEvent.ACTION_DOWN:fingerX = (int) event.getX();fingerY = (int) event.getY();LogUtil.d("onTouch: x->" + fingerX + ",y->" + fingerY);mIvFocus.setX(fingerX - length / 2);mIvFocus.setY(fingerY - length / 2);mIvFocus.setVisibility(View.VISIBLE);triggerFocusArea(fingerX, fingerY);break;}return false;}});
triggerFocusArea將實現手動對焦。

二、手動對焦實現

private void triggerFocusArea(float x, float y) {CameraManager manager = (CameraManager) getActivity().getSystemService(Context.CAMERA_SERVICE);try {CameraCharacteristics characteristics= manager.getCameraCharacteristics(mCameraId);Integer sensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);sensorOrientation = sensorOrientation == null ? 0 : sensorOrientation;Rect cropRegion = AutoFocusHelper.cropRegionForZoom(characteristics, 1f);mAERegions = AutoFocusHelper.aeRegionsForNormalizedCoord(x, y, cropRegion, sensorOrientation);mAFRegions = AutoFocusHelper.afRegionsForNormalizedCoord(x, y, cropRegion, sensorOrientation);// Step 1: Request single frame CONTROL_AF_TRIGGER_START.CaptureRequest.Builder builder;builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);builder.addTarget(mPreviewSurface);builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);mControlAFMode = AutoFocusMode.AUTO;builder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode.switchToCamera2FocusMode());builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START);mCaptureSession.capture(builder.build(), mPreCaptureCallback, mBackgroundHandler);// Step 2: Call repeatingPreview to update mControlAFMode.sendRepeatPreviewRequest();resumeContinuousAFAfterDelay(DELAY_TIME_RESUME_CONTINUOUS_AF);} catch (CameraAccessException ex) {Log.e(TAG, "Could not execute preview request.", ex);}}
首先將對焦模式設置為AutoFocusMode.AUTO。AutoFocusMode是定義枚舉類型,其定義如下:

enum AutoFocusMode {/*** System is continuously focusing.*/CONTINUOUS_PICTURE,/*** System is running a triggered scan.*/AUTO;int switchToCamera2FocusMode() {switch (this) {case CONTINUOUS_PICTURE:return CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE;case AUTO:return CameraMetadata.CONTROL_AF_MODE_AUTO;default:return CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE;}}}
用來實現自定義對焦模式和CameraMetadata中對焦模式的對應。其中AUTO即對應手動對焦

然后通過builder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode.switchToCamera2FocusMode());將對焦模式切換為手動對焦。在確定定位區域之后,通過函sendRepeatPreviewRequest恢復到

CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE;

源碼參考:https://github.com/gengqifu/361Camera,歡迎fork/star。

總結

以上是生活随笔為你收集整理的Android Camera2 拍照(四)——对焦模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。