91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何自定義相機Camera實現手動對焦

發布時間:2021-09-27 13:55:31 來源:億速云 閱讀:412 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“Android如何自定義相機Camera實現手動對焦”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Android如何自定義相機Camera實現手動對焦”這篇文章吧。

目錄

手動對焦的方法解析  實現用戶點擊屏幕后,設置對焦區域和測光區域

一、手動對焦的方法

手動對焦的實現主要通過兩個Camera方法來進行配置:

setFocusAreas 設置對焦的區域  setMeteringAreas 設置測光的區域

他們需要傳入一個Camera.Area集合,Camera.Area如圖:

/**   * Create an area with specified rectangle and weight.   *   * @param rect the bounds of the area.   * @param weight the weight of the area.   */  public Area(Rect rect, int weight) {    this.rect = rect;              this.weight = weight;        }

第一個參數是對焦和測光的區域,范圍在[-1000,-1000]到[1000,1000],第二個參數是權重,范圍在0到1000,當傳入多個Area時,權重的大小決定著對焦或測光的優先級,如果每次只對焦一個區域,那第二個參數直接傳入1000即可,大多數開發中也是如此。

說到第一個參數的范圍,請看下圖,將更加清晰明了:

我們可以看到,和手機屏幕的分辨率不同,Area到屏幕的映射區域是從左上角的-1000,-1000到右下角的1000,1000,中心點是0,0,我們點擊屏幕后獲取到的坐標,最終就需要轉化為映射區域的坐標,這是手動對焦最為重要的環節,了解了這兩個必要的參數配置后,我們就可以開始手動對焦的實現了。

二、實現用戶點擊屏幕后,設置對焦區域和測光區域 獲取點擊預覽畫面的坐標值

用戶點擊屏幕,實際是點擊的預覽畫面的區域,拍照功能大家肯定都知道,這個就不多解釋,那么我們直接通過setOnTouchListener方法對View進行監聽即可

surfaceView.setOnTouchListener(new View.OnTouchListener() {      @Override      public boolean onTouch(View v, MotionEvent event) {        Log.e("MainActivity", "X坐標:" + event.getX()+",Y坐標:"+event.getY());        return false;      }    });

通過MotionEvent我們就可以獲取到用戶點擊屏幕時,相對于View的坐標值了

將View坐標值轉化為Area映射區域的坐標值

之前說過,Area映射區域是[-1000,-1000]到[1000,1000],那么通過下面的坐標換算公式,我們就可以得到點擊預覽畫面時,映射區域的坐標值了

surfaceView.setOnTouchListener(new View.OnTouchListener() {      @Override      public boolean onTouch(View v, MotionEvent event) {        int areaX = (int) (event.getX() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區域的X坐標        int areaY = (int) (event.getY() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區域的Y坐標        return false;      }    });

獲取到映射區域的坐標后,我們就要設置一個對焦的范圍了,范圍是靈活的,我這里就創建一個長寬是200的矩形區域

surfaceView.setOnTouchListener(new View.OnTouchListener() {      @Override      public boolean onTouch(View v, MotionEvent event) {        int areaX = (int) (event.getX() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區域的X坐標        int areaY = (int) (event.getY() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區域的Y坐標        // 創建Rect區域         Rect focusArea = new Rect();        focusArea.left = Math.max(x - 100, -1000); // 取最大或最小值,避免范圍溢出屏幕坐標        focusArea.top = Math.max(y - 100, -1000);        focusArea.right = Math.min(x + 100, 1000);        focusArea.bottom = Math.min(y + 100, 1000);        return false;      }    });

設置對焦和測光

完成這一步,那就已經實現了手動對焦了,如下代碼:

surfaceView.setOnTouchListener(new View.OnTouchListener() {      @Override      public boolean onTouch(View v, MotionEvent event) {        int areaX = (int) (event.getX() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區域的X坐標        int areaY = (int) (event.getY() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區域的Y坐標        // 創建Rect區域         Rect focusArea = new Rect();        focusArea.left = Math.max(x - 100, -1000); // 取最大或最小值,避免范圍溢出屏幕坐標        focusArea.top = Math.max(y - 100, -1000);        focusArea.right = Math.min(x + 100, 1000);        focusArea.bottom = Math.min(y + 100, 1000);        // 創建Camera.Area        Camera.Area cameraArea = new Camera.Area(focusArea, 1000);        List<Camera.Area> meteringAreas = new ArrayList<Camera.Area>();        List<Camera.Area> focusAreas = new ArrayList<Camera.Area>();        if (mParameters.getMaxNumMeteringAreas() > 0) {          meteringAreas.add(cameraArea);          focusAreas.add(cameraArea);        }        mParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); // 設置對焦模式        mParameters.setFocusAreas(focusAreas); // 設置對焦區域        mParameters.setMeteringAreas(meteringAreas); // 設置測光區域        try {          mCamera.cancelAutoFocus(); // 每次對焦前,需要先取消對焦          mCamera.setParameters(mParameters); // 設置相機參數          mCamera.autoFocus(mAutoFocusCallback); // 開啟對焦        } catch (Exception e) {        }        return false;      }    });

相關注釋都在代碼中,手動對焦其實很簡單,計算好Area映射區域的坐標,為相機設置對焦和測光區域即可。

以上是“Android如何自定義相機Camera實現手動對焦”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁夏| 东至县| 澎湖县| 洛隆县| 平利县| 莫力| 会东县| 邳州市| 应用必备| 从江县| 北安市| 石渠县| 岫岩| 海盐县| 张家界市| 五峰| 刚察县| 灵寿县| 云霄县| 大埔县| 贵南县| 洱源县| 盐津县| 泸州市| 蓬安县| 星子县| 和平区| 阜平县| 甘洛县| 当涂县| 奇台县| 钦州市| 河津市| 石林| 新邵县| 盘山县| 都江堰市| 固阳县| 茂名市| 吴旗县| 运城市|