利用Android手机里的摄像头进行拍照
------- 源自梦想、永远是你IT事业的好友、只是勇敢地说出我学到! ----------
1.在API Guides中找到Camera,里面讲解了如何使用系统自带的摄像头进行工作,之后我会试着翻译这部分的内容。
2.找到Camera类:有android.hardware.Camera和android.graphics.Camera两个类,我们这里使用android.hardware.Camera。
使用Camera类来拍照的步骤如下(API 原文):
open(int).getParameters().Camera.Parameters object and call setParameters(Camera.Parameters). setDisplayOrientation(int).SurfaceHolder to setPreviewDisplay(SurfaceHolder). Without a surface, the camera will be unable to start the preview.startPreview() to start updating the preview surface. Preview must be started before you can take a picture.takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback) to capture a photo. Wait for the callbacks to provide the actual image data.startPreview() again first.stopPreview() to stop updating the preview surface.release() to release the camera for use by other applications. Applications should release the camera immediately in onPause() (and re-open() it in onResume()).2.第二步,我们调用Camera类的getParameters()方法来获取拍照的参数,这个方法返回了一个Camera.Parameters对象。即Camera.Parameters parameters=camera.getParameters();
3.如果有必要的话,我们调用setParameters(Camera.Parameters params)来修改上面所返回的Camera.Parameters对象的拍照参数。设置的方法见Camera.Parameters类,常用的有:设置预览照片的大小setPreviewSize(int width,int height),设置预览照片时每秒显示多少帧的最小值和最大值setPreviewFpsRanges(int min,int max),fps指的是:每秒帧数(frames per second);
4.如果有必要的话,我们可以调用 setDisplayOrientation(int degrees)方法来设置预览照片的方向(顺时针的)。这个方法在肖像模式的应用中很有用,因为前置摄像头拍出来的照片就像是照镜子一样,左右是相反的,这时候就要改变预览的方向了。(这个之后自己做个实例对比)。
下面两步非常重要:
5.我们传一个已经初始化完的SurfaceHolder给setPreviewDisplay(SurfaceHolder),来设置使用哪一个SurfaceView来显示取景照片,如果没有这个SurfaceView,就无法预览。
6.然后我们调用startPreView()方法开始预览取景。然后就可以拍照了。
7.调用Camera的 takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback postview, Camera.PictureCallback jpeg),参数如下:
9.结束程序时,要调用Camera的stopPreview()来结束取景预览。
10.重要:为了能让其他应用能够使用摄像头,我们要调用release()方法来释放摄像头。当Activity在onPause()的时候,释放掉;当onResume()的时候,重新打开。