android camera相机,android Camera相机类

Camera相机类相关的几个流程方法

Camera.open(cameraId) 打开相机

camera.setDisplayOrientation(0) 设置相机水平方向

mCamera.setPreviewDisplay(holder) 在SurfaceHolder上显示画面

mCamera.setPreviewCallback(callback) 设置回调,将Yuv数据传递到onPreviewFrame方法

previewRate mParams = mCamera.getParameters() 获取相机相关参数

mCamera.stopPreview() 停止预览

mCamera.release() 释放相机

实现Camera.PreviewCallback接口获取Yuv视频流

@Overridepublic void onPreviewFrame(byte[] bytes, Camera camera) {//获取实时的Yuv数据流

}

实现Camera.PictureCallback接口实现拍照

private Camera.PictureCallback mPictureCallback = newCamera.PictureCallback() {

@Overridepublic void onPictureTaken(byte[] data, Camera camera) {

String pictureDir = Environment.getExternalStorageDirectory() + File.separator +"Videocmo/images";

String pictureName= DateFormat.format("yyyyMMddHHmmss",new Date()).toString()+ ".jpg";

String path=pictureDir+ File.separator +pictureName;try{

File file= newFile(pictureDir);if (!file.exists()) {

file.mkdirs();

}

FileOutputStream fos= newFileOutputStream(path);

fos.write(data);

fos.close();

}catch(FileNotFoundException ignored) {

}catch(IOException ignored) {

}

}

};

mCamera.takePicture(null, null, mPictureCallback);

寻找相机

private int findCamera(booleanisfront) {int cameraCount = 0;

Camera.CameraInfo cameraInfo= newCamera.CameraInfo();

cameraCount=Camera.getNumberOfCameras();for (int camIdx = 0; camIdx < cameraCount; camIdx++) {

Camera.getCameraInfo(camIdx, cameraInfo);if(isfront) {//CAMERA_FACING_FRONT前置

if (cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_FRONT) {returncamIdx;

}

}else{//CAMERA_FACING_BACK后置

if (cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_BACK) {returncamIdx;

}

}

}return -1;

}

Camera.Parameters相机参数类

Camera.Parameters parameters = camera.getParameters(); //获取相机参数

List supportedPreviewSizes = parameters.getSupportedPreviewSizes(); //获取摄像头支持的各种分辨率

parameters.setPictureFormat(PixelFormat.JPEG);//设置照片格式

parameters.setPreviewSize(witdh,height); //设置预览尺寸

parameters.setPictureSize(witdh,height); //设置分辨率

camera.setParameters(parameters);//提交相机参数

设置相机分辨率

private void initCamera(Camera mCamera){if(mCamera != null){try{

mParams=mCamera.getParameters();

Size previewSize= CamParaUtil.getInstance().getPropPreviewSize(mParams.getSupportedPreviewSizes(),1.333f, 640);

Log.d("log", String.valueOf(previewSize.width) + "-" +previewSize.height);

pWidth=previewSize.width;

pHeight=previewSize.height;

mParams.setPreviewSize(pWidth, pHeight);

List focusModes =mParams.getSupportedFocusModes();if(focusModes.contains("continuous-video")){

mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);

}

mCamera.setParameters(mParams);

mCamera.startPreview();

isPreviewing= true;

mPreviwRate=previewRate;

}catch(Exception ex){

ex.printStackTrace();

}

}

}public Size getPropPreviewSize(List list, float th, intminWidth){

Collections.sort(list, sizeComparator);int i = 0;for(Size s:list){if((s.width >= minWidth) &&equalRate(s, th)){break;

}

i++;

}if(i ==list.size()){

}returnlist.get(i);

}

相关阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 CameraX 调用系统相机可以通过 `CameraX` 库的 `CameraX.LifecycleCameraProvider` 来实现。以下是调用系统相机的简单示例代码: ```kotlin private var imageCapture: ImageCapture? = null private fun startCamera() { val cameraProviderFuture = ProcessCameraProvider.getInstance(this) cameraProviderFuture.addListener(Runnable { // 获取 CameraProvider val cameraProvider = cameraProviderFuture.get() // 获取相机实例 val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA val preview = Preview.Builder().build().also { it.setSurfaceProvider(viewFinder.surfaceProvider) } imageCapture = ImageCapture.Builder().build() try { // 解绑之前绑定的相机 cameraProvider.unbindAll() // 绑定新相机 cameraProvider.bindToLifecycle( this as LifecycleOwner, cameraSelector, preview, imageCapture ) } catch (exc: Exception) { Log.e(TAG, "Use case binding failed", exc) } }, ContextCompat.getMainExecutor(this)) } // 拍照 private fun takePhoto() { val imageCapture = imageCapture ?: return val photoFile = File( outputDirectory, SimpleDateFormat(FILENAME_FORMAT, Locale.US).format(System.currentTimeMillis()) + ".jpg" ) val outputOptions = ImageCapture.OutputFileOptions.Builder(photoFile).build() imageCapture.takePicture( outputOptions, ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageSavedCallback { override fun onError(exc: ImageCaptureException) { Log.e(TAG, "Photo capture failed: ${exc.message}", exc) } override fun onImageSaved(output: ImageCapture.OutputFileResults) { val savedUri = Uri.fromFile(photoFile) val msg = "Photo capture succeeded: $savedUri" Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show() Log.d(TAG, msg) } }) } ``` 以上代码,`startCamera()` 方法用于启动相机,`imageCapture` 用于拍照,`takePhoto()` 方法用于触发拍照操作。在 `onCreate()` 方法,你需要调用 `startCamera()` 方法来启动相机,然后在需要拍照的时候调用 `takePhoto()` 方法即可。请注意,你需要在 AndroidManifest.xml 文件添加相机权限。 ```xml <uses-permission android:name="android.permission.CAMERA" /> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值