You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何通过Camera2 API获取Pixel 8 Pro的50MP原生相机分辨率

Google Pixel 8 Pro Camera2 API 50MP拍摄实现方法

1. 定位正确的摄像头ID

Pixel 8 Pro的50MP主摄对应逻辑摄像头ID,需遍历摄像头特性筛选:

  • 优先筛选硬件级别为INFO_SUPPORTED_HARDWARE_LEVEL_FULL的摄像头
  • 检查SCALER_STREAM_CONFIGURATION_MAP中是否包含8165×6124分辨率的输出尺寸

代码示例:

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String targetCameraId = null;
for (String cameraId : manager.getCameraIdList()) {
    CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
    Integer hardwareLevel = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
    if (hardwareLevel != null && hardwareLevel == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL) {
        StreamConfigurationMap configMap = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        if (configMap != null) {
            Size[] jpegSizes = configMap.getOutputSizes(ImageFormat.JPEG);
            for (Size size : jpegSizes) {
                if (size.getWidth() == 8165 && size.getHeight() == 6124) {
                    targetCameraId = cameraId;
                    break;
                }
            }
        }
    }
}

2. 配置高分辨率拍摄请求

  • 确保ImageReader的尺寸设置为8165×6124,格式对应ImageFormat.JPEG
  • 重置传感器裁剪区域为全画幅,避免被默认裁剪:
captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, 
    characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE));
  • 若开启ZSL(零延迟快门)导致分辨率降级,需关闭CONTROL_ENABLE_ZSL参数

3. 适配高分辨率模式限制

  • 50MP模式下预览分辨率会自动降级为12MP,仅拍照阶段切换到高分辨率,无需强制预览匹配
  • 如需夜景、HDR等优化效果,需添加对应请求参数:
    captureRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
    captureRequestBuilder.set(CaptureRequest.CONTROL_SCENE_MODE, CameraMetadata.CONTROL_SCENE_MODE_HDR);
    
  • 相机会话的输出Surface需包含对应分辨率的ImageReader,避免与低分辨率Surface混用

4. 备选方案:RAW转JPEG

若直接输出JPEG仍为12MP,可先获取RAW格式(ImageFormat.RAW10/ImageFormat.RAW12)数据,再自行编码为50MP JPEG:

ImageReader rawReader = ImageReader.newInstance(8165, 6124, ImageFormat.RAW10, 1);
rawReader.setOnImageAvailableListener(reader -> {
    Image rawImage = reader.acquireNextImage();
    // 处理RAW数据并编码为JPEG(可使用Android原生Bitmap或第三方编库)
    rawImage.close();
}, null);
// 将RAW reader的Surface添加到相机会话配置
List<Surface> surfaces = new ArrayList<>();
surfaces.add(rawReader.getSurface());
cameraDevice.createCaptureSession(surfaces, sessionCallback, null);

内容的提问来源于stack exchange,提问作者MayurDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:01:04