Главная » Разработка для Android » Управление камерой и создание снимков

1

Чтобы получить  прямой  доступ к аппаратным возможностям камеры, необходимо добавить полномочие CAMERA в манифест своего приложения.

<uses-permission android:name="android.permission.CAMERA"/>

Используйте класс Camera, чтобы откорректировать настройки камеры, указать параметры  изображения и сделать снимок.

Чтобы получить доступ к Сервису камеры, применяйте статический метод open из класса Camera. Когда приложение закончило работу с этим Сервисом, не забудьте освободить его ресурсы с помощью метода release, как показано в листинге 11.12.

Листинг 11.12. Использование камеры

Camera camera = Camera.open();

[ . . . Какие-либо операции с камерой . . . ]

camera.release();

ПРИМЕЧАНИЕ

Метод Camera.open включает и инициализирует камеру. После его вы- зова вы можете редактировать настройки, подготавливать поверхность для предварительного просмотра и делать снимки. Эти операции рас- смотрены в следующих разделах.

Отслеживание и изменение настроек камеры и параметров изображения

Настройки камеры хранятся в объекте Camera.Parameters, доступ к ко- торому можно получить  с помощью метода getParameters, вызванного  из экземпляра класса Camera.

Чтобы  изменить  эти настройки (листинг  11.13), используйте методы set* из объекта Parameters, после чего вызовите метод setParameters, пере- дав ему модифицированный объект.

Листинг 11.13. Чтение и изменение  настроек камеры

Camera.Parameters parameters = camera.getParameters(); [ . . . внесение изменений . . . ] camera.setParameters(parameters);

В версии  Android  2.0 (API  level 5) представлены  параметры  камеры, у каждого из которых свой геттер и сеттер.

[get/set]SceneMode. Принимает или возвращает статическую строко- вую константу  SCENE_MODE_* из класса  Parameters. Каждый

режим описывает определенный тип обстановки («вечеринка», «пляж»,

«закат» и т. д.).

[get/set]FlashMode.  Принимает или возвращает  статическую  стро- ковую константу FLASH_MODE_*. Позволяет указать режим осве- щения (включен, выключен или уменьшение эффекта  красных глаз) или режим вспышки.

[get/set]WhiteBalance. Принимает или возвращает статическую стро- ковую константу WHITE_BALANCE_*, с помощью которой описы- вается баланс белого цвета для фотографируемой сцены.

[get/set]ColorEffect.  Принимает или возвращает  статическую  стро- ковую константу EFFECT_*, чтобы изменить  способ представления изображения. Вам доступны цветовые эффекты,  включая  тон сепии или оттенки серого.

[get/set]FocusMode. Принимает или возвращает статическую строко- вую константу FOCUS_MODE_*, которая задает режим автоматиче- ской фокусировки камеры.

ПРИМЕЧАНИЕ

Большинство описанных выше параметров пригодятся прежде всего в том случае, если вы хотите заменить стандартное приложение для работы с камерой. Тем не менее их также можно задействовать при на- стройке предварительного просмотра, что позволяет изменять живой видеопоток, создавая приложения дополненной реальности.

Параметрами камеры также можно воспользоваться при чтении и за- писи настроек размера, качества и формата изображения, миниатюры и кар- тинки, отображаемой для предварительного просмотра.

• Качество JPEG и миниатюры. Используйте методы setJpegQuality и setJpegThumbnailQuality, передавая  им целочисленные значения от 0 до 100, где 100 — самое высокое качество.

• Размер  изображения, картинки для предварительного просмотра, а также миниатюры. Применяйте методы setPictureSize, setPreviewSize и setJpegThumbnailSize, чтобы задать высоту и ширину изображению, картинке для предварительного просмотра и миниатюре соответ- ственно.

• Растровый формат для изображения и картинки при предварительном просмотре. Используйте методы setPictureFormat и setPreviewFormat, чтобы задать формат изображения, задействуя статическую константу из класса PixelFormat.

• Частота кадров при предварительном просмотре. Применяйте метод setPreviewFrameRate, чтобы указать частоту кадров для предваритель- ного просмотра в FPS (количество кадров в секунду).

Каждое конкретное устройство потенциально содержит поддержку соб- ственного подмножества этих значений. Класс Camera.Parameters также со- держит методы getSupported*, с помощью которых можно найти доступные параметры,  чтобы потом показать  их пользователю. Перед присвоением значения нужно удостовериться, что данный параметр поддерживается. Подобный  подход описан в листинге 11.14.

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

Листинг 11.14. Проверка  поддержки  камерой определенных параметров

Camera.Parameters parameters = camera.getParameters();

List<String> colorEffects = parameters.getSupportedColorEffects();

if (colorEffects.contains(Camera.Parameters.EFFECT_SEPIA))

parameters.setColorEffect(Camera.Parameters.EFFECT_SEPIA);

camera.setParameters(parameters);

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии

1 комментарий

  1. Alex says:

    Camera.Parameters parameters = camera.getParameters(); [ . . . внесение изменений . . . ] camera.setParameters(parameters);

    А можете показать как вносятся изменения?