Камера Android поддерживает размеры изображений - PullRequest
14 голосов
/ 03 ноября 2011

Я пытаюсь получить доступные размеры изображения с камеры, поэтому я могу настроить камеру в соответствии с предпочтительным разрешением изображения.

Чтобы получить размер камеры Android, я использовал следующий код:

camera=Camera.open();
Parameters params = camera.getParameters();
List sizes = params.getSupportedPictureSizes();
for (int i=0;i<sizes.size();i++){
    Log.i("PictureSize", "Supported Size: " +sizes.get(i));         
}

Это дает мне следующий вывод, который я не уверен, как перевести в размер.

"Supported size: android.hardware.Camera$Size@65d4c50"
"Supported size: android.hardware.Camera$Size@65d4a70"
"Supported size: android.hardware.Camera$Size@3fe4e00"
"Supported size: android.hardware.Camera$Size@3fe4cd0"
"Supported size: android.hardware.Camera$Size@18f5600"
"Supported size: android.hardware.Camera$Size@13f7860"

Если бы кто-нибудь мог помочь мне понять результаты, это бы мне очень помогло, спасибо!

Редактировать: я решил свою проблему, выполнив следующее:

camera=Camera.open();
Parameters params = camera.getParameters();
List sizes = params.getSupportedPictureSizes();
Camera.Size result = null;
    for (int i=0;i<sizes.size();i++){
        result = (Size) sizes.get(i);
        Log.i("PictureSize", "Supported Size. Width: " + result.width + "height : " + result.height); 
    }

Ответы [ 4 ]

13 голосов
/ 03 ноября 2011

getSupportedPictureSizes() возвращает List из Camera.Size объектов. Camera.Size имеет height и width членов данных, которые сообщают вам высоту и ширину поддерживаемого размера изображения.

Вот пример проекта , который использует связанный getSupportedPreviewSizes(), чтобы найти размер предварительного просмотра с самой большой областью, которая меньше размера SurfaceView.

5 голосов
/ 03 ноября 2011
Camera camera = Camera.open();
Parameters params = camera.getParameters();
List sizes = params.getSupportedPictureSizes();
for (int i=0;i<sizes.size();i++) {
    Log.i("PictureSize", "Supported Size: " +sizes.get(i).width + "height : " + sizes.get(i).height);     
}   

Вы должны взять высоту и ширину от одного объекта размера

2 голосов
/ 17 ноября 2016

Вот пример того, как искать размер, который приближается к вашему максимальному размеру (1024 * 768), например.

                List<Camera.Size> sizes = parameters.getSupportedPictureSizes();
                //searches for good picture quality
                Camera.Size bestDimens = null;
                for(Camera.Size dimens : sizes){
                    if(dimens.width  <= 1024 && dimens.height <= 768){
                        if (bestDimens == null || (dimens.width > bestDimens.width && dimens.height > bestDimens.height)) {
                            bestDimens = dimens;
                        }
                    }
                }
                parameters.setPictureSize(bestDimens.width, bestDimens.height);
                camera.setParameters(parameters);
0 голосов
/ 22 июля 2014

Я так и сделал. Поскольку метод params.getSupportedPictureSizes() возвращает список типа Camera.Size, это было легко сделать:

        List<Camera.Size> sizes = p.getSupportedPictureSizes();

        //searches for good picture quality
        for(Camera.Size dimens : sizes){
            if(dimens.width  <= 1024 && dimens.height <= 768){
                Debug.WriteLine("Width: " + dimens.width + " Height: " + dimens.height);
                return dimens;
            }
        }

        Debug.WriteLine("Width: " + sizes.get(sizes.size()-1).width + " Height: " + sizes.get(sizes.size()-1).height);
        //returns the smallest camera size if worst comes to worst
        return p.getSupportedPictureSizes().get(sizes.size()-1);

Вы можете получить List<Camera.Size> и пройти его, как и любой другой список. Camera.Size объект имеет свойство width и height.

Объявление вашего List таким способом может быть лучше, чем приведение каждого элемента списка к типу Camera.Size внутри цикла.

На моих устройствах, если я посмотрю на sizes.get(0), у него будет самое высокое разрешение, а у sizes.get( sizes.size()-1 ) самое низкое. Однако я не уверен, правда ли это на всех устройствах. У кого-нибудь есть понимание этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...