camera获取的Previewsize重复

[DESCRIPTION]

在6757、6797、6799等平台,使用Hal 3 metadata配置Previewsize。在Camera获取配置的PreviewSize时,配置的值有重复的现象。如以下Log信息:


### 安卓 Camera API 使用指南 安卓平台提供了多种方式来访问设备的相机功能。以下是对安卓相机 API 的详细介绍以及使用方法。 #### 1. Camera2 API `android.hardware.camera2` 是用于控制设备相机的主要 API,适用于需要高级控制的应用程序开发[^1]。以下是使用 Camera2 API 的基本流程: - **初始化 CameraManager**:通过 `CameraManager` 获取可用的相机 ID 列表。 - **打开相机设备**:使用 `CameraManager.openCamera()` 方法打开指定的相机设备。 - **配置捕获会话**:创建一个 `CaptureRequest.Builder` 并设置相关参数,例如预览大小、对焦模式等。 - **设置 Surface**:将 `SurfaceView` 或其他类型的 `Surface` 作为输出目标。 - **开始捕获**:调用 `CameraCaptureSession.setRepeatingRequest()` 开始重复捕获图像。 ```java CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String[] cameraIdList = cameraManager.getCameraIdList(); cameraManager.openCamera(cameraIdList[0], new CameraDevice.StateCallback() { @Override public void onOpened(@NonNull CameraDevice cameraDevice) { mCameraDevice = cameraDevice; createCameraPreviewSession(); } @Override public void onDisconnected(@NonNull CameraDevice cameraDevice) { cameraDevice.close(); } @Override public void onError(@NonNull CameraDevice cameraDevice, int error) { cameraDevice.close(); } }, null); ``` #### 2. 旧版 Camera API `android.hardware.Camera` 是旧版 API,现已弃用[^1]。尽管如此,在某些情况下仍然可以使用它来实现基本的相机功能。以下是使用旧版 API 的示例代码: ```java Camera camera = Camera.open(); Camera.Parameters params = camera.getParameters(); // 设置预览大小 List<Camera.Size> previewSizes = params.getSupportedPreviewSizes(); Camera.Size previewSize = getBestMatchSize(previewSizes, desiredSize); params.setPreviewSize(previewSize.width, previewSize.height); camera.setParameters(params); camera.startPreview(); ``` #### 3. 使用 Intent 拍摄照片或视频 如果不需要直接控制相机,可以通过 `Intent` 调用系统相机应用来拍摄照片或视频[^1]。以下是使用 `MediaStore.ACTION_IMAGE_CAPTURE` 的示例代码: ```java Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); ``` #### 4. 处理拍照结果 在使用 Camera2 API 时,可以通过 `ImageReader.OnImageAvailableListener` 来处理拍照结果[^5]。以下是一个简单的实现示例: ```java mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader reader) { Image image = reader.acquireNextImage(); ByteBuffer buffer = image.getPlanes()[0].getBuffer(); byte[] bytes = new byte[buffer.remaining()]; buffer.get(bytes); final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); if (bitmap != null) { iv_show.setImageBitmap(bitmap); } } }, mainHandler); ``` #### 5. 示例项目参考 `CameraDemo` 是一个基于 Android 平台的相机示例项目,主要利用了 Camera2 API 来实现相机功能[^2]。开发者可以参考该项目以学习如何使用 Camera2 接口进行拍照和录制视频。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值