http://vaero.blog.51cto.com/4350852/779942
Camera定义在package android.hardware内,具体用法SDK里叙述的可清楚了。架构解析什么的网上也有很多,没什么必要讲了(你认为我不知道我会说吗)。
这篇呢,就整理了下Camera的拍照,其他还木有==
一、系统相机
1)调用方式
系统相机的入口Action:MediaStore.ACTION_IMAGE_CAPTURE。只需以startActivityForResult(…)启动该Activity即可。
- // 调用系统相机
- Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- startActivityForResult(intent, 1);
2)处理方式
在onActivityResult(…)中,处理返回信息。
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (1 == requestCode) { // 系统相机返回处理
- if (resultCode == Activity.RESULT_OK) {
- Bitmap cameraBitmap = (Bitmap) data.getExtras().get("data");
- …… // 处理图像
- }
- takeBtn1.setClickable(true);
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
二、自定义相机
1)照相预览
继承SufaceView写自己的预览
界面,继而放到你的照相Activity的布局里。这里面有个相机拍照监听接口,用于在Activity里再处理这些操作。
- public class CameraPreview extends SurfaceView implements
- SurfaceHolder.Callback {
- /** LOG标识 */
- // private static final String TAG = "CameraPreview";
- /** 分辨率 */
- public static final int WIDTH = 1024;
- public static final int HEIGHT = 768;
- /** 监听接口 */
- private OnCameraStatusListener listener;
- private SurfaceHolder holder;
- private Camera camera;
- // 创建一个PictureCallback对象,并实现其中的onPictureTaken方法
- private PictureCallback pictureCallback = new PictureCallback() {
- // 该方法用于处理拍摄后的照片数据
- @Override
- public void onPictureTaken(byte[] data, Camera camera) {
- // 停止照片拍摄
- camera.stopPreview();
- camera = null;
- // 调用结束事件
- if (null != listener) {
- listener.onCameraStopped(data);
- }
- }
- };
- // Preview类的构造方法
- public CameraPreview(Context context, AttributeSet attrs) {
- super(context, attrs);
- // 获得SurfaceHolder对象
- holder = getHolder();
- // 指定用于捕捉拍照事件的SurfaceHolder.Callback对象
- holder.addCallback(this);
- // 设置SurfaceHolder对象的类型
- holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- }
- // 在surface创建时激发
- public void surfaceCreated(SurfaceHolder holder) {
- // Log.e(TAG, "==surfaceCreated==");
- // 获得Camera对象
- camera = Camera.open();
- try {
- // 设置用于显示拍照摄像的SurfaceHolder对象
- camera.setPreviewDisplay(holder);
- } catch (IOException e) {
- e.printStackTrace();
- // 释放手机摄像头
- camera.release();
- camera = null;
- }
- }
- // 在surface销毁时激发
- public void surfaceDestroyed(SurfaceHolder holder) {
- // Log.e(TAG, "==surfaceDestroyed==");
- // 释放手机摄像头
- camera.release();
- }
- // 在surface的大小发生改变时激发
- public void surfaceChanged(final SurfaceHolder holder, int format, int w,
- int h) {
- // Log.e(TAG, "==surfaceChanged==");
- try {
- // 获取照相机参数
- Camera.Parameters parameters = camera.getParameters();
- // 设置照片格式
- parameters.setPictureFormat(PixelFormat.JPEG);
- // 设置预浏尺寸
- parameters.setPreviewSize(WIDTH, HEIGHT);
- // 设置照片分辨率
- parameters.setPictureSize(WIDTH, HEIGHT);
- // 设置照相机参数
- camera.setParameters(parameters);
- // 开始拍照
- camera.startPreview();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- // 停止拍照,并将拍摄的照片传入PictureCallback接口的onPictureTaken方法
- public void takePicture() {
- // Log.e(TAG, "==takePicture==");
- if (camera != null) {
- // 自动对焦
- camera.autoFocus(new AutoFocusCallback() {
- @Override
- public void onAutoFocus(boolean success, Camera camera) {
- if (null != listener) {
- listener.onAutoFocus(success);
- }
- // 自动对焦成功后才拍摄
- if (success) {
- camera.takePicture(null, null, pictureCallback);
- }
- }
- });
- }
- }
- // 设置监听事件
- public void setOnCameraStatusListener(OnCameraStatusListener listener) {
- this.listener = listener;
- }
- /**
- * 相机拍照监听接口
- */