本篇文章為大家展示了怎么在Android中利用Camera實現(xiàn)手動對焦,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
創(chuàng)新互聯(lián)公司從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元寬城做網(wǎng)站,已為上家服務(wù),為寬城各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
目錄
手動對焦的方法解析
實現(xiàn)用戶點擊屏幕后,設(shè)置對焦區(qū)域和測光區(qū)域
一、手動對焦的方法
手動對焦的實現(xiàn)主要通過兩個Camera方法來進行配置:
setFocusAreas 設(shè)置對焦的區(qū)域
setMeteringAreas 設(shè)置測光的區(qū)域
他們需要傳入一個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; }
第一個參數(shù)是對焦和測光的區(qū)域,范圍在[-1000,-1000]到[1000,1000],第二個參數(shù)是權(quán)重,范圍在0到1000,當傳入多個Area時,權(quán)重的大小決定著對焦或測光的優(yōu)先級,如果每次只對焦一個區(qū)域,那第二個參數(shù)直接傳入1000即可,大多數(shù)開發(fā)中也是如此。
說到第一個參數(shù)的范圍,請看下圖,將更加清晰明了:
我們可以看到,和手機屏幕的分辨率不同,Area到屏幕的映射區(qū)域是從左上角的-1000,-1000到右下角的1000,1000,中心點是0,0,我們點擊屏幕后獲取到的坐標,最終就需要轉(zhuǎn)化為映射區(qū)域的坐標,這是手動對焦最為重要的環(huán)節(jié),了解了這兩個必要的參數(shù)配置后,我們就可以開始手動對焦的實現(xiàn)了。
二、實現(xiàn)用戶點擊屏幕后,設(shè)置對焦區(qū)域和測光區(qū)域 獲取點擊預(yù)覽畫面的坐標值
用戶點擊屏幕,實際是點擊的預(yù)覽畫面的區(qū)域,拍照功能大家肯定都知道,這個就不多解釋,那么我們直接通過setOnTouchListener方法對View進行監(jiān)聽即可
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坐標值轉(zhuǎn)化為Area映射區(qū)域的坐標值
之前說過,Area映射區(qū)域是[-1000,-1000]到[1000,1000],那么通過下面的坐標換算公式,我們就可以得到點擊預(yù)覽畫面時,映射區(qū)域的坐標值了
surfaceView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int areaX = (int) (event.getX() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區(qū)域的X坐標 int areaY = (int) (event.getY() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區(qū)域的Y坐標 return false; } });
獲取到映射區(qū)域的坐標后,我們就要設(shè)置一個對焦的范圍了,范圍是靈活的,我這里就創(chuàng)建一個長寬是200的矩形區(qū)域
surfaceView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int areaX = (int) (event.getX() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區(qū)域的X坐標 int areaY = (int) (event.getY() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區(qū)域的Y坐標 // 創(chuàng)建Rect區(qū)域 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; } });
設(shè)置對焦和測光
完成這一步,那就已經(jīng)實現(xiàn)了手動對焦了,如下代碼:
surfaceView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int areaX = (int) (event.getX() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區(qū)域的X坐標 int areaY = (int) (event.getY() / surfaceView.getWidth() * 2000) - 1000; // 獲取映射區(qū)域的Y坐標 // 創(chuàng)建Rect區(qū)域 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); // 創(chuàng)建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); // 設(shè)置對焦模式 mParameters.setFocusAreas(focusAreas); // 設(shè)置對焦區(qū)域 mParameters.setMeteringAreas(meteringAreas); // 設(shè)置測光區(qū)域 try { mCamera.cancelAutoFocus(); // 每次對焦前,需要先取消對焦 mCamera.setParameters(mParameters); // 設(shè)置相機參數(shù) mCamera.autoFocus(mAutoFocusCallback); // 開啟對焦 } catch (Exception e) { } return false; } });
上述內(nèi)容就是怎么在Android中利用Camera實現(xiàn)手動對焦,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享名稱:怎么在Android中利用Camera實現(xiàn)手動對焦
標題URL:http://muchs.cn/article40/ghecho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、搜索引擎優(yōu)化、網(wǎng)站排名、外貿(mào)網(wǎng)站建設(shè)、企業(yè)建站、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)