- У нас есть фотик и котик — работаем с камерой
- Программное включение приложения Камера
- Делаем фотографии и сохраняем результат. Простой пример
- Миниатюра и полноразмерное изображение
- Запуск камеры в нужном режиме
- Снимаем и кадрируем
- Как включить фронтальную камеру на «Андроид» и iOs гаджетах
- Что такое фронтальная камера и зачем она нужна?
- Как включить фронтальную камеру на телефоне?
- Как включить переднюю камеру на iPhone?
- Работа с камерой в Android
- Настройка камеры на телефоне
- Как происходит настройка камеры на телефоне
- Настройки предустановленной камеры
- Основные настройки
- Меню с настройками
- Дополнительные возможности
- Ручной режим
- Сторонний софт
- Google Камера
- Приложения из магазина
- Что влияет на качество фото
У нас есть фотик и котик — работаем с камерой
Практически все современные телефоны и планшеты снабжаются камерами, что позволяет фотографировать любимых котиков.
Сначала сделаем небольшие приготовления. Есть класс устройств, у которых нет камер, например, электронные ридеры. Чтобы пользователи этих устройств не скачивали зря ваше приложение, которое окажется для них бесполезным, пропишем в манифесте требование наличия камеры.
Если камера в вашем приложении выполняет вспомогательную функцию, а приложение может работать и без неё, то установите значение false в предыдущем коде и проверяйте наличие камеры программно. Если камеры нет, то отключайте возможность съёмок для пользователя.
Программное включение приложения Камера
Раньше на старых телефонах можно было программно запустить из своей программы системное приложение «Камера» (в этом случае вам не понадобятся дополнительные разрешения) через намерение.
Особого смысла в этом нет, так как результат не возвращается в приложение. Но вполне подходило для быстрого запуска камеры. Впрочем, сейчас этот код может и не сработать.
А вообще у пользователя могут стоять разные приложения, способные фотографировать. Тогда у вас будет появляться диалоговое окно с выбором нужного приложения. Они все имеют в своём составе такую запись в манифесте (для общего развития):
У Гугла есть своя программа Google Камера. Запустим её, зная имя пакета.
При вызове метода getIntent() вместо new Intent() приложение запускалось сразу, иначе — выводилось диалоговое окно выбора программы из списка. Также нужно быть уверенным, что программа установлена, в примере нет кода проверки.
Делаем фотографии и сохраняем результат. Простой пример
Просто включить камеру не слишком интересно. Рассмотрим практичный пример, когда мы программно запустим приложение «Камера», а полученную фотографию сохраним в папке. Сначала сделаем простой вариант, а потом напишем более сложное приложение.
Используйте статическую константу MediaStore.ACTION_IMAGE_CAPTURE для создания намерения, которое потом нужно передать методу startActivityForResult(). Разместите на форме кнопку и ImageView, в который будем помещать полученный снимок. Этот код запускает стандартное приложение камеры. Полученное с камеры изображение можно обработать в методе onActivityResult():
Не включайте в манифест разрешение на работу с камерой, иначе получите крах приложения.
Данный код запустит приложение, работающее с камерой, позволяя пользователю поменять настройки изображения, что освобождает вас от необходимости создавать своё собственное приложение для этих нужд. Вполне возможно, что у вас будет несколько приложений, умеющих делать фотографии, тогда сначала появится окно выбора программы.
При тестировании примера на своём телефоне я обнаружил небольшую проблему — когда снимок передавался обратно на моё приложение, то оно находилось в альбомном режиме, а потом возвращалось в портретный режим. При этом полученный снимок терялся. Поэтому перед нажатием кнопки я поворачивал телефон в альбомный режим, чтобы пример работал корректно. Возможно следует предусмотреть подобное поведение, например, запретить приложению реагировать на поворот и таким образом избежать перезапуска Activity. У некоторых телефонов такой проблемы нет.
По умолчанию фотография возвращается в виде объекта Bitmap, содержащего миниатюру. Этот объект находится в параметре data, передаваемом в метод onActivityResult(). Чтобы получить миниатюру в виде объекта Bitmap, нужно вызвать метод getParcelableExtra() из намерения, передав ему строковое значение data. В примере использовался упрощённый вариант.
Миниатюра и полноразмерное изображение
Если вы укажете исходящий путь URI с помощью параметра MediaStore.EXTRA_OUTPUT в запущенном намерении, полноразмерное изображение, снятое камерой, сохранится в заданном месте. В таком случае в метод onActivityResult() не будет передана миниатюра, а итоговое намерение продемонстрирует значение null.
В следующем примере показано, как при создании снимка получать миниатюру или полноценное изображение, используя намерение. Изображение будет сохранено во внешнем хранилище под именем test.jpg.
Пример работает на устройствах до Android 6.0, потом появились различные системные ограничения и нужно писать дополнительный код.
Добавим разрешение на запись файла в хранилище.
В реальных приложениях для создания имён файлов используют текущую дату, чтобы обеспечить уникальность и не затереть существующую фотографию.
Запуск камеры в нужном режиме
Мы можем выбрать намерение, позволяющее включить камеру в нужном режиме: фотосъёмка или видео.
Снимаем и кадрируем
Рассмотрим ещё один пример с режимом кадрирования. Основная часть кода остаётся прежней. Рекомендую проверять работу с камерой на реальных устройствах, так как многие производители заменяют стандартные методы съёмки своими прошивками и драйверами. В частности, намерение с кадрированием является проблемной, и в интернете многие жалуются на отсутствие поддержки этого способа. Пример для старых устройств до Android 6.0.
Создадим простенький макет из кнопки для запуска камеры и ImageView для вывода кадрированного изображения.
Для большей красоты сделаем задний фон у ImageView с закруглёнными углами и обводкой. Для этого в атрибуте android:background мы прописали специальный стиль. Создайте папку res/drawable, а в ней файл background.xml следующего содержания:
Этот шаг не является обязательным и его можно пропустить.
При нажатии кнопки запускаем приложение Камера и ожидаем результата.
После того, как пользователь сделал нужный кадр, программа Камера возвращает результат обратно в наше приложение. Результат обрабатывается в методе onActivityResult():
Получив полноразмерное изображение, мы пытаемся откадрировать его. Для этого создадим метод performCrop(), который запускает специальное намерение, предназначенное для этих целей. В успешном случае результат снова возвращается в наше приложение, но уже с другим кодом PIC_CROP. Теперь мы имеем нужное изображение, которое можно вывести на экран.
При кадрировании мы указываем желаемые размеры (код метода ниже). Если указать слишком больше размеры (больше 400), то результат не возвращается. Попробуйте добавить ещё два параметра:
Результат работы приложения, когда запускается намерение кадрирования и итоговый результат. Желательно тренироваться на кошках.
Источник
Как включить фронтальную камеру на «Андроид» и iOs гаджетах
Сейчас наличием фотокамеры никого не удивишь, ими оснащены все ноутбуки, планшеты и смартфоны. Некоторые способны делать фотографии, не уступающие по качеству профессиональным фотоаппаратам. В статье предоставлена информация о фронтальной камере, которая предназначена для съемки, используя переднюю панель гаджета.
Что такое фронтальная камера и зачем она нужна?
Существует два вида фотокамер: основная и фронтальная. Фронтальной называют камеру, которая расположена на передней панели гаджета. Обычно передняя камера немного уступает по качеству основной, допустим, если разрешение основной будет 8 Мп, то фронтальная, скорее всего, будет около 5 Мп.
Передняя камера предназначена для совершения видеозвонков, то есть во время общения через «Скайп», или подобных ему программ, собеседники видят друг друга при помощи этих камер. Поэтому перед тем, как включить фронтальную камеру, хорошо бы привести себя в порядок.
В последнее время стало очень популярно делать селфи. Для тех, кто не знает – это автопортрет, то есть после того как включили фронтальную камеру, делаются снимки себя любимого.
Как включить фронтальную камеру на телефоне?
Когда речь идет о видеосвязи, обычно передняя камера включается автоматически. Особенно это касается ноутбуков. Но иногда на планшетах и смартфонах все же приходится делать это вручную.
Допустим, вы общаетесь с другом по «Ватсап» или «Скайпу», но собеседник не видит вас или вместо вашего лица видит совсем другое изображение, то есть, включена основная камера. Как в таком случае включить фронтальную камеру? Необходимо найти иконку, обозначающую фотоаппарат и нажать на нее. Обычно после этого происходит смена камеры.
Если вы намереваетесь сфотографировать самого себя и задаетесь вопросом о том, как включить фронтальную камеру на «Андроид»-смартфоне, примерный порядок действий таков:
- активируйте (разблокируйте) экран смартфона;
- найдите на рабочем столе или в основном меню иконку с фотоаппаратом;
- по умолчанию на всех андроид гаджетах сначала включается основная камера. В режиме съемки на экране должна присутствовать иконка в виде камеры с двумя стрелками, которые ее огибают, нажмите на нее.
Вот и все, теперь вы знаете, как включить фронтальную камеру. Интерфейс смартфонов и планшетов на базе «Андроид» приблизительно одинаковый, поэтому данное руководство действительно для всех гаджетов.
Как включить переднюю камеру на iPhone?
Итак, руководство по работе со смартфонами и планшетами на базе iOs:
- Найдите в главном меню иконку серого цвета с камерой посередине и активируйте ее. Если вас интересует, как включить фронтальную камеру на айфоне быстро, советуем воспользоваться дополнительной функцией. В случаях, когда нужно срочно включить камеру, достаточно провести влево на блокировочном экране.
- В появившемся экране имеется значок с двумя стрелками (правый нижний угол), нажмите на нее, если хотите сделать селфи.
- В самом низу имеется круглая белая кнопка, а над ней горизонтальный список всех доступных режимов съемки. Для того чтобы сделать стандартное фото, установите режим photo и нажмите на круглую кнопку.
- Для видеосъемки установите режим video и вновь нажмите на белую кнопку.
Ну вот, собственно, все. При желании можно редактировать получившиеся фотографии на свое усмотрение во вкладке «Настройки».
Источник
Работа с камерой в Android
Работа с камерой на телефоне всегда представляла для меня интерес. Как же это все устроено… И вот мне в руки попал телефон с Android’ом. Я не преминул возможностью попробовать разобраться в этом. Вот что получилось в итоге.
Рассмотрим небольшую программу, которая позволяет делать снимки.
Все операции проводятся с помощью класса Camera.
Необходимо завести переменную
и инициализировать ее
После завершения работы с камерой необходимо сделать
в противном случае камера останется заблокированной и недоступной для других приложений.
Для обычных приложений типа фотокамеры инициализацию лучше всего производить в onResume, а освобождение в onPause.
Обязательным условием при работе с камерой является создание окна предпросмотра (preview). Это окно должно являться объектом класса Surfaceи для отображения на экране подходит SurfaceView.
Объявим
Чтобы задать preview, необходимо вызвать метод setPreviewDisplay, параметром которого является объект класса SurfaceHolder.
Чтобы включить отображение preview, вызываем
Если этого не сделать, то камера не сможет делать снимки.
Собственно для того, чтобы сделать снимок, необходимо вызвать метод
С помощью параметров (кстати, любой из них может быть null) задаются обработчики разных событий:
- shutter — вызывается в момент получения изображения с матрицы
- raw — программе передаются для обработки raw данные (если поддерживается аппаратно)
- postview — программе передаются полностью обработанные данные (если поддерживается аппаратно)
- jpg — программе передается изображение в виде jpg. Здесь можно организовать запись изображения на карту памяти.
Вызов takePicture можно поместить непосредственно в обработчик onClick кнопки — в этом случае фотографирование произойдет сразу после нажатия на нее, но можно и воспользоваться предварительной автофокусировкой.
В этом случае задается обработчик Camera.AutoFocusCallback, в котором необходимо реализовать метод
Тогда после вызова в обработчике нажатия на кнопку camera.autoFocus(), однократно будет вызван обработчик, в котором мы уже и примем решение об удачной фокусировке и необходимости сделать снимок.
Для работы с SurfaceHolder можно задать SurfaceHolder.Callback
surfaceHolder.addCallback();
В этом случае необходимо реализовать методы
C помощью них приложению будет сообщаться о том, что Surface успешно создано, если оно изменено или то, что оно удалено.
Размер нашего preview можно менять в процессе выполнения программы:
Для приложения камеры удобнее всего сразу задать расположение экрана как
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
В противном случае нам придется, например, в surfaceCreated проверять расположение экрана и поворачивать preview с помощью, например, camera.setDisplayOrientation(0) .
Это не очень удобно, потому что поворот экрана занимает какое-то время. В этот момент происходит вызов onPause и onResume, пересоздается Surface.
Также имеется возможность объявить обработчик Camera.PreviewCallback, с помощью которого путем реализации метода
можно получать и обрабатывать каждый кадр, отображаемый в preview.
И последний важный момент. Чаще всего получается так, что отношение сторон SurfaceView отличается от отношения сторон в preview камеры. Поэтому для того, чтобы избежать искажений изображения на экране, необходимо подкорректировать размер отображаемого окна предпросмотра.
Чуть не забыл. В манифест необходимо добавить permission
MainScreen.java
main.xml
AndroidManifest.xml
Программа отлаживалась и тестировалась на телефоне LG Optimus One P500.
При написании использовались следующие источники информации:
Источник
Настройка камеры на телефоне
Качество мобильных снимков зависит от того, как настроить камеру на телефоне Андроид. Делают это через родное ПО или сторонние приложения, загруженные с Google Play или интернета.
Как происходит настройка камеры на телефоне
Параметры камеры делят на :
- Основные — включают/отключают искусственный интеллект, вспышку, соотношение сторон фотоснимка.
- Ручные — изменяют выдержку, чувствительность, экспозицию и баланс белого.
Ручные настройки оставляют в моделях из среднего и флагманского диапазона, куда устанавливают продвинутые сенсоры. Владельцы бюджетных смартфонов довольствуются автоматическими параметрами, выставленными разработчиками.
В отдельных прошивках, юзерам доступно включение/отключение вспышки, зум и режим бьютификации.
Поскольку оригинальное ПО бывает недоработанным, пользователи прибегают к использованию решений из магазина приложений или Google-камере. Если первый вариант является универсальным, то второе представляет модификацию софта с устройства из линейки Google Pixel, оптимизированное под конкретную модель другими пользователями.
Теперь конкретно о настройках родной и сторонних камер на примере Meizu 16th.
Настройки предустановленной камеры
Вначале расскажем о базовых настройках, а затем о расширенных.
Основные настройки
Доступны в интерфейсе автоматического режима съемки и предлагают :
- Включение, отключение или автоматическую работу вспышки. Необходима, чтобы подсветить кадр в сумрачное, темное время суток или осветить темное помещение.
- Активация режима HDR — увеличивает динамический диапазон кадра, делая кадры насыщеннее. Снимки получаются менее естественными и требуют время на постобработку, склеивая серию фото в одно.
- Обратный отсчет — таймер на 3, 5 и более секунд перед созданием фотоснимка.
- Фильтры — набор встроенных фильтров, которые добавляют кадру синевы, делают его черно-белым или накладывают сепию.
- Режим бьютификации или мейкапа — устраняет дефекты кожи на лице, делая его ненатурально гладким.
Набор функций отличается от камеры, предустановленной в оболочку устройства.
Меню с настройками
Это отдельная вкладка, отмеченная иконкой шестеренки. Она включает активацию/деактивацию :
- Сетки — делит экран на блоки, выделяя середину сцены.
- Уровня — определяет, насколько завален объектив влево или вправо
- Даты на снимке — отметка в углу фото, когда был сделан кадр.
- Водяного знака — вотермарка с названием модели.
- Искусственного интеллекта — алгоритмы автоматически определяют сцену в кадре и выбирают настройки. Отличают людей, детей, животных, закат и прочее.
Отдельно устанавливают соотношение сторон фото, выбирая между классическими 4:3, 16:9 или современными 18/19/20:9.
На устройствах с поддержкой карт памяти, здесь выбирают накопитель, куда будут сохранять получившиеся кадры.
Дополнительные возможности
Сюда относятся не настройки, а выбор режима съемки. Во вкладку «Еще» попала :
- Панорама — увеличивает захват кадра.
- Сканер — распознает информацию, сокрытую в QR-кодах.
- Покадровая съемка — делает серию снимков с разницей в 0,5-5 секунд.
- Замедленная съемка — увеличивает частоту кадров, замедляя видео.
- Квадрат — делает кадр в формате 1:1.
- Ночной режим — делает беспрерывную серию фото, чтобы получить с них больше света в темное время суток.
В смартфонах с несколькими сенсорами реализовано переключение между широкоформатным, теле и макро объективом.
Ручной режим
Здесь пользователи самостоятельно меняют настройки камеры смартфона, а именно :
- Выдержку — время, за которое сенсор делает снимок.
- ISO — это светочувствительность (кадр будет темнее или светлее).
- Экспозицию — определяет долю света, которая попадает на сенсор.
- Фокус — настраивает фокусное расстояние от макро до бесконечного значения
- Баланс белого — цветокоррекция в зависимости от типа освещения (солнце, лампы).
Сторонний софт
На телефоне с Андроид настройка камеры, установленной производителем, иногда не способна сравниться с автоматической работой отдельных приложений.
Google Камера
Официально, этот софт выпускают для линейки Pixel от Google. Энтузиасты делают моды для популярных моделей от других производителей, которые выкладывают на тематических форумах. В зависимости от настроек, ПО заметно улучшает снимки и предлагает больше настроек:
- количество снимков для HDR+ режима;
- ограничение выдержи в разных типах съемки;
- разрешение снимков основной и фронтальной камеры;
- определить битрейт, разрешение и включить стабилизацию для видео;
- включить работу жестов, добавление геотегов, отметить папку для сохранения кадров.
Поскольку софт перенесен на другие устройства неофициально, часть функций не работает или камера автоматически сворачивается.
Работает решение от Google в сочетании со смартфонами на базе процессоров Snapdragon. Исключением выступает популярный Redmi Note 8 Pro с процессором MediaTek.
Приложения из магазина
Найти аналогичное Гугл Камере приложение в Play Маркет невозможно. Решения вроде B612 или Snapseed накладывают заготовленные фильтры и помогают повысить качество кадров их постобработкой.
Что влияет на качество фото
Коротко о том, что определяет конечное качество фото :
- Установленная матрица — ее физический размер и размер пикселя. Компактность смартфона вынуждает устанавливать миниатюрные матрицы, но уместить их в тонкий корпус невозможно, из-за чего они “торчат” с телефона.
- Размер апертуры — определяет сколько света, способно попасть на матрицу.
- Линзы.
- Наличие оптической, электронной или ИИ-стабилизации изображения.
- Софт, завязанный на мощностях устройства, которые определяет установленный чипсет.
Разрешение камеры не влияет на качество снимков, но помогает получить больше информации из кадра.
Настройка камеры на смартфонах Android не занимает много времени, но требует знаний фотографии от пользователя. Кто хочет получить максимум от снимков, должны воспользоваться ручными настройками или попробовать Google Камеру.
Источник