用camera1和camerax設(shè)置預(yù)覽view
我的設(shè)備類似于手機(jī),支持-3到3區(qū)間的曝光補(bǔ)償值
camera1中在camera.parameters中設(shè)置parameters.exposureCompensation為-3到3的值
camerax中在camera.cameraControl.setExposureCompensationIndex設(shè)置為-3到3的值
兩種api都可以在-3到0時看到預(yù)覽view有比較明顯的亮度變化,但是在0到3的值時界面看不到絲毫變化
然后我用系統(tǒng)攝像頭測試,從-3到3的曝光值都有很明顯的效果變化
以下是我的截圖效果



這是我寫的demo中能達(dá)到的最暗到最亮的曝光值得效果



以上是我設(shè)備的系統(tǒng)自帶相機(jī)app分別在曝光值為-3,0,3的情況下截的圖
以上6張圖的截圖時間都在3分鐘以內(nèi),排除環(huán)境影響,我讀了系統(tǒng)日志
2022-05-11 16:00:53.686 378-4510/? D/CameraClient: setParameters (pid 17503) (3dnr-mode=on;3dnr-mode-values=on,off;afeng-max-focus-step=1023;afeng-min-focus-step=0;aflamp-mode=off;aflamp-mode-values=off,on,auto;antibanding=off;antibanding-values=off,50hz,60hz,auto;auto-exposure-lock-supported=true;auto-whitebalance-lock-supported=true;brightness=middle;brightness-values=low,middle,high;brightness_value=0;cap-mode-values=normal,face_beauty,continuousshot,smileshot,bestshot,autorama,asd;capfname=/sdcard/DCIM/cap00;contrast=middle;contrast-values=low,middle,high;cshot-indicator=true;cshot-indicator-supported=true;dynamic-frame-rate=true;dynamic-frame-rate-supported=true;edge=middle;edge-values=low,middle,high;effect=none;effect-values=none,mono,negative,sepia,aqua,whiteboard,blackboard,posterize,nashville,hefe,valencia,xproll,lofi,sierra,walden;eng-mfll-e=false;eng-mfll-s=true;eng-s-shad-t=0;eng-shad-t=0;exposure-compensation-step=1.0;face-beauty=false;face-beauty-supported=true;fb-enlarge-eye-max=4;fb-enlarge-eye-min=-4;fb-extreme-beauty=true;fb-extreme-beauty

系統(tǒng)相機(jī)修改曝光值時會打印相機(jī)參數(shù),確實(shí)只是修改了exposure-compensation這個參數(shù),但是我不明白為什么系統(tǒng)自帶的相機(jī)app可以在-3到3的曝光值下能有這么明顯的曝光設(shè)置,而我寫的預(yù)覽view卻只有在-3到0的曝光值有一點(diǎn)效果
好吧,我自己解決了
首先我原先的demo并沒有對camera的parameters做什么修改,只是加了兩個+和-曝光度的按鈕去做修改,我的設(shè)備是定制設(shè)備,所以我的demo在手機(jī)上運(yùn)行調(diào)整曝光度都是正常的,但是在這臺定制設(shè)備上運(yùn)行,調(diào)整后置攝像頭的曝光度就沒有什么效果,而且對比系統(tǒng)相機(jī)同樣的曝光度完全沒有系統(tǒng)相機(jī)那么亮,于是我找了各種資料,終于在stackoverflow找到類似的問題
https://stackoverflow.com/questions/26967490/android-camera-preview-is-dark?r=SearchResults&s=1|110.7368
但是我按這里面的方法修改后依然沒有效果,然后中午午休結(jié)束回到辦公室繼續(xù)看系統(tǒng)相機(jī)和我的demo的亮度區(qū)別,就發(fā)現(xiàn)我的demo也可以成功調(diào)整曝光度和系統(tǒng)相機(jī)一樣的效果了
最后我的代碼是在surfaceCreated中camera.setPreviewCallback(previewCallback);之前對camera的parameters做了一些修改
Camera.Parameters parameters = camera.getParameters();
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
parameters.setColorEffect(Camera.Parameters.EFFECT_NONE);
parameters.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
parameters.setAntibanding(Camera.Parameters.ANTIBANDING_OFF);
parameters.setPreviewFpsRange(10,30);
parameters.setPreviewFrameRate(10);
parameters.set("iso","ISO800");
parameters.setPreviewSize(parameters.getPreferredPreviewSizeForVideo().width,
parameters.getPreferredPreviewSizeForVideo().height);
camera.setParameters(parameters);
以及增加了surfaceview的ontouch監(jiān)聽,點(diǎn)擊surfaceview會調(diào)用camera.parameters的setFocusAreas和setMeteringAreas修改聚焦區(qū)域和測光區(qū)域
做了這些修改后,曝光度和點(diǎn)擊聚焦測光依然是沒有效果
然后我切換到系統(tǒng)相機(jī)調(diào)整了一下曝光度,再回到自己的demo,會看到一個很明顯的曝光度調(diào)整的過程,然后我的曝光度調(diào)整按鈕和surfaceview的touch監(jiān)聽就生效了。。
最后我的代碼中只保留了以下的參數(shù)設(shè)置,調(diào)整曝光度和觸摸聚焦依然會生效
Camera.Parameters parameters = camera.getParameters();
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
parameters.setPreviewFpsRange(10,30);
parameters.setPreviewFrameRate(10);
camera.setParameters(parameters);
記錄一下奇葩問題