如何调用系统相机

今天需要用到调用系统相机的功能,就在网上看看,现在谢谢总结!嘻嘻

调用系统的相机

  1. 首先需要通过Intent对象那个来加载MediaStore.ACTION_IMAGE_CAPTURE(Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);)
  2. 然后直接 startActivity(intent ),就可以调用到了。
    这里写图片描述

调用系统的相机2

  1. 步骤一同上面的第一步
  2. 第二步的话需要调用startActivityForResult(intent, REQ_1);
  3. 第二步调用activity的onActivityResult方法,通过穿的参数REQ_1来确定你需要打开的相机
    这里写图片描述
    这里写图片描述

自己定义一个相机

  1. 首先在AndroidManifest.xml文件里写上
    这里写图片描述
    2.同上2(这里给上一张图)

自己定义一个相机2

  1. 创建相机
  2. 创建SurfaceView
  3. 关联相机和SurfaceView
  4. 调整相机的显示效果
  5. 自定义相机的预览界面
    你也可以到这里学习一下http://www.imooc.com/learn/543

源码下载

private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
        // data完整的拍照数据
        @SuppressLint("SdCardPath")
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            File jpgFile = new File("/sdcard/test.jpeg");
            try {
                FileOutputStream fos = new FileOutputStream(jpgFile);
                fos.write(data);
                fos.close();
                Intent intent = new Intent(CustomCameraActivity.this,
                        MResultActivity.class);
                intent.putExtra("picPath", jpgFile.getAbsolutePath());
                startActivity(intent);
                CustomCameraActivity.this.finish();

            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom_camera);
        mSurfaceView = (SurfaceView) findViewById(R.id._surfaceView);

        mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.addCallback(this);

    }

    public void captrue(View view) {
        // 获取设置相机的Parameters
        Camera.Parameters mParameters = mCamera.getParameters();
        // 设置拍照的图片类型
        mParameters.setPictureFormat(ImageFormat.JPEG);
        // 设置拍照的图片大小
        mParameters.setPictureSize(800, 400);
        // //设置拍照自动聚焦
        mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
        mCamera.autoFocus(this);

    }

    /**
     * mCamera.autoFocus(this)的回调方法
     * 
     * @param success
     * @param camera
     */
    @Override
    public void onAutoFocus(boolean success, Camera camera) {
        if (success) {
            mCamera.takePicture(null, null, mPictureCallback);
        }

    }

    /**
     * 获得Camera对象
     * 
     * @return
     */
    private Camera getCamera() {
        Camera mCamera = null;
        if (mCamera == null) {
            mCamera = Camera.open();
        }

        return mCamera;

    }

    /**
     * 开始预览相机内容
     */
    private void setStartPreview(Camera camera, SurfaceHolder holder) {

        try {
            camera.setPreviewDisplay(holder);
            // 将系统Camera预览角度尽心调整
            camera.setDisplayOrientation(90);
            camera.startPreview();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 释放相机资源
     */
    private void releaseCamera() {

        if (mCamera != null) {
            mCamera.setPreviewCallback(null);
            mCamera.stopPreview();
            mCamera.release();
            mCamera = null;
        }

    }

    @Override
    protected void onResume() {
        super.onResume();
        if (mCamera == null) {
            mCamera = getCamera();
            if (mSurfaceHolder != null) {
                setStartPreview(mCamera, mSurfaceHolder);
            }
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        releaseCamera();
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        setStartPreview(mCamera, mSurfaceHolder);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        setStartPreview(mCamera, mSurfaceHolder);

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        releaseCamera();
    }


----------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值