[关闭]
@cxm-2016 2016-09-19T15:25:26.000000Z 字数 1842 阅读 2566

Android:通过Camera进行拍照

android no


Android应用提供了Camera来控制拍照,其使用步骤如下:

  • 1,通过Camera的open()方法打开相机(默认打开后置摄像头,也可以通过指定ID打开相应的摄像头)
  • 2,通过Camera的getParameters()方法获取拍照参数对象
  • 3,调用Camera的startPreview()方法开始预览取景,在取景前需要调用Camera的setPreviewDisplay(SurfaceHolder)设置显示
  • 4,调用Camera的takePicture()方法拍照
  • 5,调用Camera的stopPreview()取消预览,并调用release()方法释放资源

权限说明

  1. <uses-permission android:name="android.permission.CAMERA"/>

Demo

注意:android.hardware.Camera已经被废弃,已经有了新的拍照架构camera2,这里的示例仍然是老的版本

  1. class CaptureActivity : BaseActivity<IPresenter>() {
  2. var isPreview = false
  3. val camera: Camera = Camera.open()
  4. val path = "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).absolutePath}/Camera"
  5. override fun onCreate(savedInstanceState: Bundle?) {
  6. super.onCreate(savedInstanceState)
  7. setContentView(R.layout.activity_capture)
  8. camera.setDisplayOrientation(90)
  9. val parameters = camera.parameters
  10. parameters.setPreviewSize(width, height)//预览图片的大小
  11. parameters.setPreviewFpsRange(4, 10)//每秒显示帧数的最小值和最大值
  12. parameters.pictureFormat = ImageFormat.JPEG//保存图片的格式
  13. parameters.set("jpeg-quality", 100)//保存图片的质量
  14. parameters.setPictureSize(width, height)//保存照片的尺寸
  15. cSurfaceView.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS)
  16. cSurfaceView.holder.addCallback(object : SurfaceHolder.Callback {
  17. override fun surfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int) {
  18. }
  19. override fun surfaceDestroyed(holder: SurfaceHolder?) {
  20. if (isPreview) camera.stopPreview()
  21. camera.release()
  22. }
  23. override fun surfaceCreated(holder: SurfaceHolder) {
  24. camera.setPreviewDisplay(holder)
  25. camera.startPreview()
  26. }
  27. })
  28. cCapture.setOnClickListener { capture() }
  29. }
  30. fun capture() {
  31. camera.autoFocus { success, camera ->
  32. if (success) {
  33. camera.takePicture({
  34. //快门瞬间回调
  35. }, { data, camera ->
  36. //图片原始信息回调
  37. }, { data, camera ->
  38. //拍照完成回调
  39. val file = FileUtils(path, DateUtils.getTimeStamp() + ".jpg")
  40. file.clear()
  41. file.append(data)
  42. file.close()
  43. camera.stopPreview()
  44. camera.startPreview()
  45. isPreview = true
  46. })
  47. }
  48. }
  49. }
  50. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注