Android调用Camera

    xiaoxiao2021-11-07  66

    Android调用Camera

    调用系统相机或者是具有相机功能的App

    调用系统相机

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 修改拍照所对应图片的路径,filePath为路径 Uri photoUri = Uri.fromFile(new File(filePath); // 往intent添加MediaStore.EXTRA_OUTPUT intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); startActivityForResult(intent, requestCode);

    调用具有相机功能的App

    // 在AndroidManifest.xml文件中添加 <activity> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>

    获取拍摄图片

    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // data保存的是缩略图的信息,原图的话太大会导致内存泄露 if(resultCode == RESULT_OK && requestCode == 100){ if(data != null){ Bundle bundle = data.getExtras(); // 获取图片转换成Bitmap Bitmap bitmap = (Bitmap) bundle.get("data"); } } }

    自定义相机

    使用SurfaceView组件来显示相机内容。打开Camera,并且try catch设置为空。mCamera.open();每次操作Camera的时候判断是否为空。Camera的使用要与Activity的生命周期绑定,如onDestory()、onPause()。 if(mCamera != null){ mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.replease(); mCamera = null; } 使用SurfaceView拿到SurfaceHolder对象,并且实现SurfaceHolder.Callback接口,并且重写方法。 SurfaceHolder对象。mSurfaceHolder = mSurfaceView.getHolder();设置回调。mSurfaceHolder.addCallback(this);实现接口。 @Override public void surfaceCreated(SurfaceHolder holder) { // 创建 if(mCamera != null && mSurfaceHolder != null){ mCamera.setPreviewDisplay(mSurfaceHolder); // 将系统Camera预览角度进行调整,默认是横屏的 mCamera.setDisplayOrientation(90); mCamera.startPreview(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // 修改 mCamera.stopPreview(); if(mCamera != null && mSurfaceHolder != null){ mCamera.setPreviewDisplay(mSurfaceHolder); // 将系统Camera预览角度进行调整,默认是横屏的 mCamera.setDisplayOrientation(90); mCamera.startPreview(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { // 销毁 if(mCamera != null){ mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.replease(); mCamera = null; } } 预览相机。 if(mCamera != null && mSurfaceHolder != null){ mCamera.setPreviewDisplay(mSurfaceHolder); // 将系统Camera预览角度进行调整,默认是横屏的 mCamera.setDisplayOrientation(90); mCamera.startPreview(); } 添加权限 <users-permission android:name="android.permission.CAMERA" />

    注意

    使用Camera的时候,导入的包要到hardware的,而不是graphics的。Android 5.0后新增了具有高级功能的Camera2。
    转载请注明原文地址: https://ju.6miu.com/read-678089.html

    最新回复(0)