Урок 132. Камера. Вывод изображения на экран. Размер preview. Обработка поворота устройства
Урок 132. Камера. Вывод изображения на экран. Размер preview. Обработка поворота устройства
В этом уроке:
- используем объект Camera для получения изображения с камеры
- подгоняем изображение под размеры экрана
- учитываем поворот устройства
Click here to read this article!
- используем объект Camera для получения изображения с камеры
- подгоняем изображение под размеры экрана
- учитываем поворот устройства
Click here to read this article!
Последний раз редактировалось damager82 28 май 2017, 21:49, всего редактировалось 7 раз.
Re: Урок 132. Камера. Вывод изображения на экран. Обработка
Спасибо за наглядный урок!
Есть ли возможность средствами SDK реализовать фото-съемку в фоновом режиме при свернутом приложении?
Вот уже который день мучаюсь этим вопросом.
Насколько я понял, гугл жестко ограничили доступ к системной камере и без активного окна превью она не работает.
На просторах интернета нашел несколько решений скрытия этого окна:
1) делать превью размером 1*1 пиксель.
2) использовать Surface-пустышку:
У меня на Nexus 4 не заработало.
3) Использование TextureView в API level >= 14 с методом .setVisibility(INVISIBLE);
Но все равно, при уходе activity в background, Surface закрывается и камера отказывается снимать.
Есть ли возможность средствами SDK реализовать фото-съемку в фоновом режиме при свернутом приложении?
Вот уже который день мучаюсь этим вопросом.
Насколько я понял, гугл жестко ограничили доступ к системной камере и без активного окна превью она не работает.
На просторах интернета нашел несколько решений скрытия этого окна:
1) делать превью размером 1*1 пиксель.
2) использовать Surface-пустышку:
Код: Выделить всё
SurfaceView view = new SurfaceView(this);
c.setPreviewDisplay(view.getHolder());
c.startPreview();
3) Использование TextureView в API level >= 14 с методом .setVisibility(INVISIBLE);
Но все равно, при уходе activity в background, Surface закрывается и камера отказывается снимать.
Re: Урок 132. Камера. Вывод изображения на экран. Обработка
Как же всё понятно! Парни, я вас люблю..за ваш талант, всё так доступно объяснять ![Улыбается :)](./images/smilies/icon_e_smile.gif)
Этого урока мне как раз и не хватало
![Улыбается :)](./images/smilies/icon_e_smile.gif)
Этого урока мне как раз и не хватало
Re: Урок 132. Камера. Вывод изображения на экран. Обработка
Что-то запускаю этот пример на телефоне..и не работает (
Re: Урок 132. Камера. Вывод изображения на экран. Обработка
Здравствуйте. Подскажите пожалуйста, каким образом полученное изображение выводимое на экран в реальном времени переводить в bitmap, чтобы далее работать с ним как с массивом точек, то есть чтобы не сохранялось изображение и потом его обработка шла, а прям во время вывода на экран изображения. Заранее спасибо.
Re: Урок 132. Камера. Вывод изображения на экран
Desire S никак не отреагировал на поворот 270 градусов. Может, это связано с настройками системы?
Re: Урок 132. Камера. Вывод изображения на экран. Размер pre
А как сделать видеопоток (например MJPEG) и гнать его по Wi-Fi ?
Re: Урок 132. Камера. Вывод изображения на экран. Размер pre
//Выставил аналогичный коммент к видео урока на Ютуб
Проявился интересный нюанс. Если писать как в уроке
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.
Проявился интересный нюанс. Если писать как в уроке
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.
Re: Урок 132. Камера. Вывод изображения на экран. Размер pre
Может кому пригодится ![Улыбается :)](./images/smilies/icon_e_smile.gif)
Заметил, что если и в методе "surfaceCreated", и в "surfaceChanged" оставить код, как показано в уроке - на Android API >= 15 Camera вылетает с ошибкой "Camera server died; ICamera died; Error 100". Так вот метод surfaceCreated лучше оставить пустым, а surfaceChanged пускай остается, как в уроке. И все отлично работает)
![Улыбается :)](./images/smilies/icon_e_smile.gif)
Заметил, что если и в методе "surfaceCreated", и в "surfaceChanged" оставить код, как показано в уроке - на Android API >= 15 Camera вылетает с ошибкой "Camera server died; ICamera died; Error 100". Так вот метод surfaceCreated лучше оставить пустым, а surfaceChanged пускай остается, как в уроке. И все отлично работает)
Re: Урок 132. Камера. Вывод изображения на экран. Размер pre
А как бы получить аналогичное для нового апи 21+ ???
Re: Урок 132. Камера. Вывод изображения на экран. Размер pre
Ребят возникла проблема. С помощью данного урока камера на превью показывает очень близко снимок в отличие того что получается на картинки при сохранение. Как данную проблему разрешить. Что бы на превью показывало то что получится на на снимке?
За ранее благодарен, очень нужна Ваша помощь.
За ранее благодарен, очень нужна Ваша помощь.
Re: Урок 132. Камера. Вывод изображения на экран. Размер pre
import android.hardware.Camera; в более свежих API не рекомендован. что использовать?
Re: Урок 132. Камера. Вывод изображения на экран. Размер preview.
Всем доброго дня.
Подскажите, как сделать preview определенного размера. Но чтобы в нем отображалось не всё изображение с камеры, а лишь его часть.
Подробности на картинке. Сюда загрузить не получилось, ссылка на яндекс диск https://yadi.sk/i/BRGK-58wsuj7BA
То есть, хочу показывать на экране только часть от всего изображения с камеры. И соответственно, чтобы не портились пропорции
Подскажите, как сделать preview определенного размера. Но чтобы в нем отображалось не всё изображение с камеры, а лишь его часть.
Подробности на картинке. Сюда загрузить не получилось, ссылка на яндекс диск https://yadi.sk/i/BRGK-58wsuj7BA
То есть, хочу показывать на экране только часть от всего изображения с камеры. И соответственно, чтобы не портились пропорции