我尝试使用新的camera2
API拍照时使用最大分辨率。首先,我尝试使用以下代码获得可用的分辨率:
字符:
CameraCharacteristics characteristics = mManager.getCameraCharacteristics(mCameraId);
StreamConfigurationMap streamMap =
characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
if (streamMap == null) {
throw new RuntimeException("StreamConfigurationMap is null. Should not happen.");
}
streamMap.getOutputSizes(ImageFormat.*); // I replaced the star with all possible values
问题是,这会返回以下分辨率列表:[1280x960, 1088x1088, 640x480, 352x288, 176x144, 3264x1836, 3264x2448, 1280x720, 960x720, 720x480, 320x240, 1920x1080, 2400x1080, 1440x1080, 2576x1932, 3264x1468]
(最大为3264x2448)
然而,当使用普通相机应用程序(Samsung A70)时,图片分辨率却出奇的大,即:4032x3024
。
在调查期间,我尝试从商店下载许多相机应用程序,以查看在这种情况下的最大分辨率,并且所有相机应用程序都返回了与我相同的分辨率,即:3264x2448
。
我的问题是Stock Camera App如何获得比我们其他人更大的分辨率?
您是否也检查了StreamConfigurationMap#getHighResolutionOutputSizes()的输出?
某些设备在此处列出最高分辨率,因为它们无法维持BURST_CAPTURE功能所保证的> = 20 fps输出速率,如果要使用FULL级设备,则正常大小列表上的所有大小都需要此功能。只要以正常大小列出了至少8 MP,设备就符合BURST_CAPTURE规则,并且可以在getHighResolutionOutputSizes下列出更高的分辨率。