我正在尝试使用CameraManager在android.hardware.camera2和StreamConfigurationMap getOutputSizes(ImageFormat.RAW_SENSOR)中获得设备摄像机的最大分辨率。它正在使用API的22和24,但不高于25+。在较新的android版本上获得最大相机分辨率的方法是什么?
CameraManager manager = (CameraManager) getActivity().getSystemService(CAMERA_SERVICE);
try {
for (String cameraId : manager.getCameraIdList()) {
CameraCharacteristics chars = manager.getCameraCharacteristics(cameraId);
StreamConfigurationMap streamConfigurationMap = chars.get(
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
//Log.d(TAG, "onCreate: " + (streamConfigurationMap.getOutputSizes(ImageFormat.RAW_SENSOR)[0]));
String mp = streamConfigurationMap.getOutputSizes(ImageFormat.RAW_SENSOR)[0].toString();
String[] mpX = mp.split("x");
float x = Float.parseFloat(mpX[0]);
float y = Float.parseFloat(mpX[1]);
double xy = (double) (x * y) / 1000000;
Log.d(TAG, "onCreate:" + Math.round(xy * 100.0) / 100.0); // here i get resolution in megapixels
}
} catch (CameraAccessException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
如果我用
ImageFormat.JPG
它给了我一些价值,但它们不是相机分辨率。
发布于 2019-04-07 17:22:32
像这样试试。
CameraManager cameraManager = (CameraManager) getContext().getSystemService(Context.CAMERA_SERVICE);
for (final String cameraId : cameraManager.getCameraIdList()) {
CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId);
StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] sizes = streamConfigurationMap.getOutputSizes(ImageFormat.RAW_SENSOR);
Log.d(TAG, "onCreate:" + getCameraMP(sizes);
}
private String getCameraMP(Size[] size) {
String finalCameraRes = getMP(size[0], 1);
int maxSize = size[0].getHeight() * size[0].getWidth();
for (Size camSize : size) {
int tempMax = camSize.getHeight() * camSize.getWidth();
if (tempMax > maxSize) {
maxSize = tempMax;
finalCameraRes = getMP(camSize, 1);
}
}
return finalCameraRes;
}
private String getMP(Size size, int decimalPlaces) {
float mp = (size.getWidth() * size.getHeight()) / 1000000f;
if (decimalPlaces == 1) {
return String.format(Locale.US, "%.1f", mp) + " MP";
} else if (decimalPlaces == 2) {
return String.format(Locale.US, "%.2f", mp) + " MP";
} else {
return String.format(Locale.US, "%.2f", mp) + " MP";
}
}
这将适用于几乎所有的安卓5.0+设备,即使相机许可没有被授予。
https://stackoverflow.com/questions/55561574
复制相似问题