现在的手机几乎都能实现照相机功能了,而且在硬件的支持下像素也越来越高,在现实生活中的用途也越来越广,而在Android中专门提供了Camera来处理相机相关的事件。Android Camera是一个专门用来连接和断开相机服务的类,Camera下面包括如下几个事件:

Camera.AutoFocusCallback:自动调焦功能;
Camera.ErrorCallback:错误信息捕捉;
Camera.Parameters:相机的属性参数;
Camera.PictureCallback:拍照、产生图片时触发;
Camera.PreviewCallback:相机预览设置;
Camera.ShutterCallback:快门设置;
Camera.Size:图片的尺寸;

要在Android中使用相机服务很简单,Camera没有构造方法,我们要使用它直接通过open()方法来打开相机设备,然后通过Camera.Parameters对相机的一些属性进行设置,比如输出图片的格式、大小等等。使用Camera可进行的操作,如表7-5所示。

方法

说明

 autoFocus

 设置自动对焦

 getParameters

 得到相机的参数

 open

 启动相机服务

 release

 释放Camera服务

 setParameters

 设置预览的参数

 setPreviewDisplay

 设置预览

 startPreview

 开始预览

 stopPreview

 停止预览

 takePicture

 拍照

这里重点说明一下拍照的方法和使用,takePicture方法要实现3个回调函数,分别是:Camera.ShutterCallback(快门)个两个Camera.PictureCallback〔图像数据)。这里我们在拍照之后要取得图像数据就需要实现Camera.PictureCallback的onPictureTaken方法。onPictureTaken第个参数就是图像数据,第二个参数则是相机。

下面看一个通过相机拍照的例子。相机需要一个界面来预览当前拍摄的效果,这里可以使用SurfaceView类。

下而我们来看具体如何使用相机服务预览效果,最后按导航键中键来拍照,将照片保存到SD卡中(当然首先要确认有SD卡插入哦)。具体代码如下:

package          com.yarin.android.Examples_07_06;        


                  


         import          java.io.BufferedOutputStream;        


         import          java.io.File;        


         import          java.io.FileOutputStream;        


         import          java.io.IOException;        


         import          android.app.Activity;        


         import          android.content.Context;        


         import          android.graphics.Bitmap;        


         import          android.graphics.BitmapFactory;        


         import          android.graphics.Canvas;        


         import          android.graphics.PixelFormat;        


         import          android.hardware.Camera;        


         import          android.hardware.Camera.PictureCallback;        


         import          android.os.Bundle;        


         import          android.view.KeyEvent;        


         import          android.view.SurfaceHolder;        


         import          android.view.SurfaceView;        


         import          android.view.Window;        


                  


         public          class          Activity01          extends          Activity        


         {        


                  private          Preview mPreview;        


                  


                  


                  /** Called when the activity is first created. */        


                  @Override        


                  public          void          onCreate(Bundle savedInstanceState)        


                  {        


                  super         .onCreate(savedInstanceState);        


                  requestWindowFeature(Window.FEATURE_NO_TITLE);        


                  


                  // Create our Preview view and set it as the content of our activity.        


                  mPreview =          new          Preview(         this         );        


                  setContentView(mPreview);        


                  }        


                  


                  


                  public          boolean          onKeyUp(         int          keyCode, KeyEvent event)        


                  {        


                  switch          (keyCode)        


                  {        


                  case          KeyEvent.KEYCODE_DPAD_CENTER:        


                  mPreview.takePicture();        


                  break         ;        


                  }        


                  return          true         ;        


                  }        


         }        


                  


         /* Preview-显示Preview */        


         class Preview extends SurfaceView implements SurfaceHolder.Callback         


         {        


                  SurfaceHolder mHolder;        


                  Camera mCamera;        


                  Bitmap CameraBitmap;        


                  


                  Preview(Context context)         


                  {        


                  super(context);        


                  mHolder = getHolder();        


                  mHolder.addCallback(this);        


                  mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        


                  }        


                  


                  public void surfaceCreated(SurfaceHolder holder)         


                  {        


                  /* 启动Camera */        


                  mCamera = Camera.open();        


                  try         


                  {        


                  mCamera.setPreviewDisplay(holder);        


                  }         


                  catch (IOException exception)         


                  {        


                  /* 释放mCamera */        


                  mCamera.release();        


                  mCamera = null;        


                  // TODO: add more exception handling logic here        


                  }        


                  }        


                  


                  public void surfaceDestroyed(SurfaceHolder holder)         


                  {        


                  /* 停止预览 */        


                  mCamera.stopPreview();        


                  mCamera = null;        


                  }            


                  public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)         


                  {        


                  /* 构建Camera.Parameters对相机的参数进行设置 */        


                  Camera.Parameters parameters = mCamera.getParameters();        


                  /* 设置拍照的图片格式 */        


                  parameters.setPictureFormat(PixelFormat.JPEG);        


                  /* 设置Preview的尺寸 */        


                  parameters.setPreviewSize(320, 480);        


                  /* 设置图像分辨率 */        


                  //parameters.setPictureSize(320, 480);        


                  /* 设置相机采用parameters */        


                  mCamera.setParameters(parameters);        


                  /* 开始预览 */        


                  mCamera.startPreview();        


                  }        


                  /* 拍照片 */        


                  public void takePicture()         


                  {        


                  if (mCamera != null)         


                  {        


                  mCamera.takePicture(null, null, jpegCallback);        


                  }        


                  }        


                  /* 拍照后输出图片 */        


                  private PictureCallback jpegCallback = new PictureCallback()         


                  {        


                  public void onPictureTaken(byte[] _data, Camera _camera)        


                  {        


                  // TODO Handle JPEG image data        


                  CameraBitmap = BitmapFactory.decodeByteArray(_data, 0, _data.length);         


                  File myCaptureFile = new File("/sdcard/camera1.jpg");        


                  try        


                  {        


                  BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));        


                  CameraBitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);        


                  bos.flush();        


                  bos.close();        


                  /* 将拍到的图片绘制出来 */        


                  Canvas canvas= mHolder.lockCanvas();        


                  canvas.drawBitmap(CameraBitmap,          0         ,          0         ,          null         );        


                  mHolder.unlockCanvasAndPost(canvas);        


                  


                  }        


                  catch          (Exception e)        


                  {        


                  e.getMessage();        


                  }        


                  }        


                  };        


         }

好了,到这里我就向大家详细介绍了Android中相机Camera的用法,希望对大家学习Android有所帮助,谢谢。