Android實現手機網路攝影機的自動對焦_Android

來源:互聯網
上載者:User

如何?Android相機的自動對焦,而且是連續自動對焦的。當然直接調用系統相機就不用說了,那個很簡單的。下面我們主要來看看如如何自己實現一個相機,並且實現自動連續對焦。

代碼如下:

public class MainActivity extends Activity { private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; private boolean flag = false; private String fileUrl=""; Camera camera; Camera.Parameters parameters;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);   surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);   Button button=(Button) findViewById(R.id.takepicture);   surfaceHolder = surfaceView.getHolder();   surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);   surfaceHolder.setKeepScreenOn(true);   surfaceView.setFocusable(true);   surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);   surfaceHolder.addCallback(new Callback() {   @Override public void surfaceDestroyed(SurfaceHolder holder) {  // TODO Auto-generated method stub  camera.stopPreview();  camera.release();  camera=null;   }   @Override public void surfaceCreated(SurfaceHolder holder) {  // TODO Auto-generated method stub  if(null==camera){   camera=Camera.open();      try {     camera.setPreviewDisplay(surfaceHolder);     initCamera();         camera.startPreview();  } catch (IOException e) {   // TODO Auto-generated catch block   e.printStackTrace();  }     }   }      @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){     //實現自動對焦      camera.autoFocus(new AutoFocusCallback() {        @Override  public void onAutoFocus(boolean success, Camera camera) {         if(success){         initCamera();//實現相機的參數初始化         camera.cancelAutoFocus();//只有加上了這一句,才會自動對焦。         }        }  });    } }); } //相機參數的初始化設定   private void initCamera() {    parameters=camera.getParameters();    parameters.setPictureFormat(PixelFormat.JPEG);    //parameters.setPictureSize(surfaceView.getWidth(), surfaceView.getHeight()); // 部分定製手機,無法正常識別該方法。  parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);   parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//1連續對焦  setDispaly(parameters,camera);  camera.setParameters(parameters);  camera.startPreview();  camera.cancelAutoFocus();// 2如果要實現連續的自動對焦,這一句必須加上   }    //控製圖像的正確顯示方向   private void setDispaly(Camera.Parameters parameters,Camera camera)   {   if (Integer.parseInt(Build.VERSION.SDK) >= 8){  setDisplayOrientation(camera,90);  } else{  parameters.setRotation(90);  }      }      //實現的映像的正確顯示   private void setDisplayOrientation(Camera camera, int i) {   Method downPolymorphic; try{   downPolymorphic=camera.getClass().getMethod("setDisplayOrientation", new Class[]{int.class});     if(downPolymorphic!=null) {      downPolymorphic.invoke(camera, new Object[]{i});      }  }  catch(Exception e){  Log.e("Came_e", "映像出錯");  }   }   @Override  public boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.main, menu);        return true;  }    }

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.