权限
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
//自动对焦的权限
<uses-feature android:name="android.hardware.camera.autofocus" />
通过surfaceView显示系统摄像头
1,设置SurfaceViewCallback()监听surfaceview的状态
surfaceView.getHolder().addCallback(...)
2,在callback中的各个方法里面,操作相机
在surfaceCreated(SurfaceHolder holder)方法中创建相机
camera = android.hareware.Camera.open();
//这个方法必须在startPreview方法前调用
camera.setPreviewDisplay(holder);
android.hardware.Camera.Parameters parameters = camera.getParameters();
//一些设置,可以不设
//分辨率
parameters.setPreviewSize(200, 200);
//每秒从摄像头捕获5帧画面
parameters.setPreviewFrameRate(20);
//照片输出格式
parameters.setPictureFormat(PixelFormat.JPEG);
camera.setParameters(parameters);
//开启前置摄像头
camera.startPreview();
在surfaceview销毁的时候释放摄像头
camera.stopPreview();
camera.release();
拍照
拍照使用camera.tackPiture()这个方法。当调用camera.takePiture()之后,camera就会关闭预览,这时候需要重新调用startPreview()来开启预览。
tackPicture()需要传入三个参数,分别得到拍照瞬间的回调,没有压缩过的图片数据,jpeg的图片数据。如果不需要对图片进行处理,可以直接使用null代替。
//后两个参数都是一个返回byte[]的回调。byte[]可以自行转换为图片。
takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg)
- 拍照得到的图片不会自动存储哦,要自己把照片保存到本地。
自动对焦
autoFocus(),这个方法必须在startPreview和stopPreview()中间。
autoFocus()会提供一个回调接口,当对焦成功后,会调用此接口