现在的手机几乎都能实现照相机功能了,而且在硬件的支持下像素也越来越高,在现实生活中的用途也越来越广,而在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卡插入哦)。具体代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 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有所帮助,谢谢。

更多相关文章

  1. Android通过Alpha实现渐变效果的几个方法
  2. Android学习(2)EditView属性
  3. 设置Android设备按Power按键不休眠
  4. Android开发学习笔记:TextView的属性详解
  5. Android(安卓)ViewPager+TabHost实现首页导航
  6. Android设置Settings:预读取设置的选项和更新设置结果【2】
  7. Android学习之五:android一些基本控件
  8. android R.java资源文件不自动生成的原因
  9. Android网络编程之WebKit应用

随机推荐

  1. android 文字描边
  2. Android热更新六:Qzone热更新原理
  3. Android设置页面Activity全屏(隐藏导航栏
  4. android 布局中的属性总结
  5. android 相对布局里面的一些属性
  6. Android菜单详解——理解android中的Menu
  7. android EditText inputType 值说明
  8. Android(安卓)EditText 的 inputType属性
  9. Android热更新九:Robust热更新原理
  10. Android基础04-基本控件及表单三大控件