Урок 132. Камера. Вывод изображения на экран. Размер preview. Обработка поворота устройства

Обсуждение уроков
Ответить
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 132. Камера. Вывод изображения на экран. Размер preview. Обработка поворота устройства

Сообщение damager82 » 29 сен 2013, 23:00

В этом уроке:
- используем объект Camera для получения изображения с камеры
- подгоняем изображение под размеры экрана 
- учитываем поворот устройства


Click here to read this article!
Последний раз редактировалось damager82 28 май 2017, 21:49, всего редактировалось 7 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Fromitt
Сообщения: 1
Зарегистрирован: 03 окт 2013, 15:38

Re: Урок 132. Камера. Вывод изображения на экран. Обработка

Сообщение Fromitt » 03 окт 2013, 16:11

Спасибо за наглядный урок!

Есть ли возможность средствами SDK реализовать фото-съемку в фоновом режиме при свернутом приложении?
Вот уже который день мучаюсь этим вопросом.

Насколько я понял, гугл жестко ограничили доступ к системной камере и без активного окна превью она не работает.
На просторах интернета нашел несколько решений скрытия этого окна:
1) делать превью размером 1*1 пиксель.
2) использовать Surface-пустышку:

Код: Выделить всё

SurfaceView view = new SurfaceView(this);
c.setPreviewDisplay(view.getHolder());
c.startPreview();
У меня на Nexus 4 не заработало.
3) Использование TextureView в API level >= 14 с методом .setVisibility(INVISIBLE);

Но все равно, при уходе activity в background, Surface закрывается и камера отказывается снимать.

Eva
Сообщения: 4
Зарегистрирован: 11 окт 2013, 20:22

Re: Урок 132. Камера. Вывод изображения на экран. Обработка

Сообщение Eva » 11 окт 2013, 22:00

Как же всё понятно! Парни, я вас люблю..за ваш талант, всё так доступно объяснять :)
Этого урока мне как раз и не хватало

Nika
Сообщения: 1
Зарегистрирован: 16 окт 2013, 11:32

Re: Урок 132. Камера. Вывод изображения на экран. Обработка

Сообщение Nika » 16 окт 2013, 11:35

Что-то запускаю этот пример на телефоне..и не работает (

GreatDrek
Сообщения: 1
Зарегистрирован: 27 окт 2013, 00:20

Re: Урок 132. Камера. Вывод изображения на экран. Обработка

Сообщение GreatDrek » 27 окт 2013, 00:23

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

denis_po3
Сообщения: 14
Зарегистрирован: 01 ноя 2013, 15:45

Re: Урок 132. Камера. Вывод изображения на экран

Сообщение denis_po3 » 25 июн 2014, 23:36

Desire S никак не отреагировал на поворот 270 градусов. Может, это связано с настройками системы?

Neptyn
Сообщения: 6
Зарегистрирован: 23 дек 2014, 11:57

Re: Урок 132. Камера. Вывод изображения на экран. Размер pre

Сообщение Neptyn » 23 дек 2014, 12:01

А как сделать видеопоток (например MJPEG) и гнать его по Wi-Fi ?

AlexKain
Сообщения: 1
Зарегистрирован: 13 авг 2015, 00:51

Re: Урок 132. Камера. Вывод изображения на экран. Размер pre

Сообщение AlexKain » 13 авг 2015, 00:53

//Выставил аналогичный коммент к видео урока на Ютуб

Проявился интересный нюанс. Если писать как в уроке

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
.....
.....
.....
}

то вываливается вот такая вот ошибка

08-13 00:37:13.345 17190-17190/com.alexk.p1321_camerascreen E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.alexk.p1321_camerascreen, PID: 17190
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.alexk.p1321_camerascreen/com.alexk.p1321_camerascreen.MainActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2345)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405)
at android.app.ActivityThread.access$800(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5333)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:305)
at android.app.Activity.requestWindowFeature(Activity.java:3596)
at com.alexk.p1321_camerascreen.MainActivity.onCreate(MainActivity.java:31)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405)
at android.app.ActivityThread.access$800(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5333)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
08-13 00:37:18.143 17190-17190/com.alexk.p1321_camerascreen I/Process﹕ Sending signal. PID: 17190 SIG: 9

//==========================================================

Если написать вот так:

protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

super.onCreate(savedInstanceState);
...
...
...
}
т.е. строку super.onCreate(savedInstanceState); поставить после получения окна, то все нормально. Проект отлаживался на ОС 5.0.2 Lollipop, среда Android Studio.

Dim4ikhot
Сообщения: 1
Зарегистрирован: 10 сен 2015, 17:36

Re: Урок 132. Камера. Вывод изображения на экран. Размер pre

Сообщение Dim4ikhot » 10 сен 2015, 17:44

Может кому пригодится :)

Заметил, что если и в методе "surfaceCreated", и в "surfaceChanged" оставить код, как показано в уроке - на Android API >= 15 Camera вылетает с ошибкой "Camera server died; ICamera died; Error 100". Так вот метод surfaceCreated лучше оставить пустым, а surfaceChanged пускай остается, как в уроке. И все отлично работает)

assan
Сообщения: 48
Зарегистрирован: 24 мар 2013, 22:31

Re: Урок 132. Камера. Вывод изображения на экран. Размер pre

Сообщение assan » 26 ноя 2015, 09:52

А как бы получить аналогичное для нового апи 21+ ???

span4ez
Сообщения: 2
Зарегистрирован: 25 май 2016, 14:56

Re: Урок 132. Камера. Вывод изображения на экран. Размер pre

Сообщение span4ez » 25 май 2016, 15:04

Ребят возникла проблема. С помощью данного урока камера на превью показывает очень близко снимок в отличие того что получается на картинки при сохранение. Как данную проблему разрешить. Что бы на превью показывало то что получится на на снимке?
За ранее благодарен, очень нужна Ваша помощь.

_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

Re: Урок 132. Камера. Вывод изображения на экран. Размер pre

Сообщение _ILYA_ » 14 фев 2018, 22:15

import android.hardware.Camera; в более свежих API не рекомендован. что использовать?

shamka
Сообщения: 1
Зарегистрирован: 30 сен 2019, 11:19

Re: Урок 132. Камера. Вывод изображения на экран. Размер preview.

Сообщение shamka » 30 сен 2019, 11:41

Всем доброго дня.
Подскажите, как сделать preview определенного размера. Но чтобы в нем отображалось не всё изображение с камеры, а лишь его часть.
Подробности на картинке. Сюда загрузить не получилось, ссылка на яндекс диск https://yadi.sk/i/BRGK-58wsuj7BA

То есть, хочу показывать на экране только часть от всего изображения с камеры. И соответственно, чтобы не портились пропорции

Ответить