Android 如何在Camera 2 API中配置捕获大小

Android 如何在Camera 2 API中配置捕获大小,android,android-camera2,Android,Android Camera2,我正在制作一个android摄像头应用程序。我的疑问是如何将支持的分辨率作为参数传递给相机 首先,我要得到所有支持的分辨率大小: Size[] sizes = configurationMap.getOutputSizes(ImageFormat.YUV_420_888); Log.d("test","size:"+sizes.length); for(Size size : sizes){ Log.d("test", "width: " + size.getWidth() + " h

我正在制作一个android摄像头应用程序。我的疑问是如何将支持的分辨率作为参数传递给相机

首先,我要得到所有支持的分辨率大小:

Size[] sizes = configurationMap.getOutputSizes(ImageFormat.YUV_420_888);
Log.d("test","size:"+sizes.length);

for(Size size : sizes){
    Log.d("test", "width: " + size.getWidth() + " height" + size.getHeight());
}
然后,我将使用其中一种大小配置输入

InputConfiguration inputConfiguration = new InputConfiguration(1920, 1080, ImageFormat.YUV_420_888);
我正在将此输入传递给捕获会话

cameraDevice.createReprocessableCaptureSession(inputConfiguration, Arrays.asList(previewSurface), new CameraCaptureSession.StateCallback() {
    @Override
    public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
        try {
            cameraCaptureSession.setRepeatingRequest(mCaptureRequestBuilder.build(), null, handler);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
        Toast.makeText(getApplicationContext(),"Camera Preview Failed!!",Toast.LENGTH_SHORT).show();
    }
}, null);
而且,我也得到了一个

java.lang.IllegalArgumentException: input size 1920x1080 is not valid
错误,尽管我的手机摄像头支持此大小(来自
getOutputSizes()
的调试结果)


所以,我的问题是我的方法和我错在哪里。

不要把我的方法和错误混淆。请注意,您必须单独检查输入或输出是否支持该格式。

现在如何将参数发送到getOutputSizes(),就像我必须从微调器获取值,然后为输出配置提供两个属性height和width,并使用此属性创建CaptureSessionByOutputConfigurations(),以某种方式显示选定分辨率的图片。如何发送这些输出参数,文档只会让它变得更难。这不容易文档化,因为在大多数情况下,我们可以依赖默认行为。你想实现什么?好吧,制作一个小型相机应用程序,有一个微调器,具有所有支持的输出分辨率,用户可以从微调器中选择,这些参数设置为相机,以获得具有所选用户分辨率的输出图像。好吧,这是我的项目,或者我可以使用GitHub之类的东西或一些默认的移动相机应用。IMHO,选择预览图像的输出大小没有什么价值。我发现我可以用任何方式保存图像,然后用位图以特定分辨率保存,然后压缩,然后保存。