Camera2 キャプチャサイズの取得|Android開発

      2018/05/21

Camera2 APIでの各キャプチャ画像サイズ取得方法です。
それぞれTextureViewがavailableになる前でも実行可能です。

プレビューサイズの取得

SurfaceTexture指定で取得

(SurfaceaddTargetしてプレビューする場合)

public static List<Size> getSupportedPreviewSizes(Context context, String cameraId) {
    List<Size> previewSizes = new ArrayList<>();
    CameraManager cameraManager =
        (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
    try {
        CameraCharacteristics characteristics =
            cameraManager.getCameraCharacteristics(cameraId);
        StreamConfigurationMap map =
            characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        if(map == null) {
            return previewSizes;
        }
        previewSizes = Arrays.asList(map.getOutputSizes(SurfaceTexture.class));
        Collections.sort(previewSizes, SizeComparator);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
    return previewSizes;
}

フォーマット指定で取得

public static List<Size> getSupportedPreviewSizes(Context context, String cameraId) {
    List<Size> previewSizes = new ArrayList<>();
    CameraManager cameraManager =
        (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
    try {
        CameraCharacteristics characteristics =
            cameraManager.getCameraCharacteristics(cameraId);
        StreamConfigurationMap map =
            characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        if(map == null) {
            return previewSizes;
        }
        previewSizes = Arrays.asList(map.getOutputSizes(ImageFormat.YUV_420_888));
        Collections.sort(previewSizes, SizeComparator);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
    return previewSizes;
}

撮影サイズの取得

プレビューサイズの取得と同じ手順です。
ImageFormatによってプレビューとの差分が出たりします。

public static List<Size> getSupportedPictureSizes(Context context, String cameraId) {
    List<Size> pictureSizes = new ArrayList<>();
    CameraManager cameraManager =
        (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
    try {
        CameraCharacteristics characteristics =
            cameraManager.getCameraCharacteristics(cameraId);
        StreamConfigurationMap map =
            characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        if(map == null) {
            return pictureSizes;
        }
        pictureSizes = Arrays.asList(map.getOutputSizes(ImageFormat.JPEG));
        Collections.sort(pictureSizes, SizeComparator);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
    return pictureSizes;
}

SizeComparatorはソート用のComparatorオブジェクト。

 - Android