Поддерживаемые размеры поддерживаемых камер Android
Я пытаюсь получить доступные размеры изображения камеры, поэтому я могу настроить камеру на предпочтительное разрешение изображения.
Чтобы получить размер камеры 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: [email protected]"
"Supported size: [email protected]"
"Supported size: [email protected]"
"Supported size: [email protected]"
"Supported size: [email protected]"
"Supported size: [email protected]"
Если бы кто-нибудь мог помочь мне понять результат, это мне очень помогло, спасибо!
Изменить: я решил решить свою проблему, выполнив следующие действия:
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);
}
Ответы
Ответ 1
getSupportedPictureSizes()
возвращает List
объектов Camera.Size
. Camera.Size
имеет элементы height
и width
, которые сообщают вам о высоте и ширине поддерживаемого размера изображения.
Вот пример проекта, который использует связанный getSupportedPreviewSizes()
, чтобы найти размер предварительного просмотра с наибольшей площадью, которая меньше размера SurfaceView
.
Ответ 2
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);
}
Вы должны брать высоту и ширину от одного объекта размера
Ответ 3
Вот пример того, как искать размер, который aprroaching максимальный размер (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);
Ответ 4
Это то, что я закончил делать. Поскольку метод 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 )
- самое низкое. Однако я не уверен, что это верно для всех устройств. Кто-нибудь знает об этом?