Android实现手机摄像头的自动对焦
程序员文章站
2024-03-01 20:20:40
如何实现android相机的自动对焦,而且是连续自动对焦的。当然直接调用系统相机就不用说了,那个很简单的。下面我们主要来看看如如何自己实现一个相机,并且实现自动连续对焦。...
如何实现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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。