zoukankan      html  css  js  c++  java
  • Android中相机拍照

      Android中调用系统相机的api接口在android.hardware包中。包里面类主要用到了Camera类。该类里面包含几个内部类:Camera.Parameters、Camera.CameraInfo、Camera.PictureCallback。

       Camera.Parameters是通过Camera.Parameters parameters = mCamera.getParameters()获取,主要用来设置相机的一些參数,包含图片的格式、是否开启闪光灯等。

       

       Camera.CameraInfo是通过CameraInfo info = new CameraInfo(); Camera.getCameraInfo(0, info)获取,主要用来获取相机的參数,包含方向等。

       Camera.PictureCallback是直接new Camera.PictureCallback()然后实现里面的回调方法,public void onPictureTaken(byte[] data, Camera camera)将byte[]转换为bitmap。

      相机的调用是先int mCameraId = Camera.getNumberOfCameras() - 1, Camera.open(mCameraId)。依据CameraInfo调整相机方向等。然后点击拍照后调用设置Camera.Parameters。mCamera.takePicture(null, null, pictureCallBack);最后在Camera.PictureCallback里获取图片。


      在调用系统相机时还须要用到android.view包里的用于显示图像的类,SurfaceView、SurfaceHolder、SurfaceHolder.Callback。

    通过mSurfaceViewPicture = new SurfaceView(context), 在打开相机之后调用

    mSurfaceHolder = mSurfaceViewPicture.getHolder(); 

    mSurfaceHolder.addCallback(mCallback);
    // 设置类型
    mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    mPictureView.addView(mSurfaceViewPicture);//mPictureView是FrameLayout用于显示图形的。

    private Callback mCallback = new Callback() {
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    }
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    try {
    mCamera.setPreviewDisplay(mSurfaceHolder);
    } catch (IOException e) {
    LogUtils.e(TAG, ""+e.getMessage());
    if (mCamera != null) {
    mCamera.release();
    mCamera = null;
    }
    }
    }
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
    if (mCamera != null) {
    Camera.Parameters parameters = mCamera.getParameters();
    parameters.setPictureFormat(PixelFormat.JPEG);
    mCamera.setParameters(parameters);
    mCamera.startPreview();
    }
    }
    };

  • 相关阅读:
    手把手教会你如何通过C#创建Windows Service
    推荐几款软件界面模型设计工具
    visual studio 2010小技巧
    C# 枚举在属性中运用
    C# Stream 和 byte[] 之间的转换
    推荐一款DataGridView的打印解决方案
    VB提高专辑VB编写自定义类(下)
    vb 怎么把长整型转字符串
    Android NAND: nand_dev_load_disk_state, restore failed: size required (3546398242485400641) exceeds device limit (6920
    VB中各种类型的转换
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7044692.html
Copyright © 2011-2022 走看看