Android:相机开发

权限

<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()会提供一个回调接口,当对焦成功后,会调用此接口

参考资料

    原文作者:thiagooo0
    原文地址: https://www.jianshu.com/p/23e8b744c761
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞