首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获得android设备摄像头分辨率

获得android设备摄像头分辨率
EN

Stack Overflow用户
提问于 2019-04-07 17:03:22
回答 1查看 1.4K关注 0票数 1

我正在尝试使用CameraManager在android.hardware.camera2和StreamConfigurationMap getOutputSizes(ImageFormat.RAW_SENSOR)中获得设备摄像机的最大分辨率。它正在使用API的22和24,但不高于25+。在较新的android版本上获得最大相机分辨率的方法是什么?

代码语言:javascript
运行
复制
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

它给了我一些价值,但它们不是相机分辨率。

EN

回答 1

Stack Overflow用户

发布于 2019-04-07 17:22:32

像这样试试。

代码语言:javascript
运行
复制
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+设备,即使相机许可没有被授予。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55561574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档