Я использую sample code для Camera2, и мне было интересно, как я могу сделать предварительный просмотр и захваченное изображение в полноэкранном режиме? This Вопрос SO, похоже, решает его в видеорежиме, но я не могу найти решение для захвата изображений. Фрагмент фрагмента имеет голубую область внизу, а также имеет статус bas. Я хочу скрыть оба из них и использовать весь экран, чтобы показать предварительный просмотр, а также захватить изображение в полноэкранном режиме.Camera2 полноэкранный просмотр и захват изображения
ответ
Обратите внимание, что соотношение сторон датчика камеры и соотношение сторон экрана устройства чаще всего не совпадают - датчики обычно имеют соотношение 4: 3 и экраны, как правило, около 16: 9. Хотя в обоих есть широкая вариация.
Поскольку пропорции не совпадают, вам нужно решить, будете ли вы иметь черные полосы или масштабировать предварительный просмотр камеры так, чтобы он заполнял экран (но некоторая часть изображения не видна).
В любом случае, чтобы предварительный просмотр был полноэкранным, вам просто нужно, чтобы TextureView (или SurfaceView) был всего макета. Поэтому в основном отредактируйте этот файл макета: fragment_camera2_basic.xml, удалите все другие виды и удалите ссылки на них в исходном коде. Или измените их, чтобы они были поверх TextureView, а не рядом - это все стандартные элементы интерфейса Android UI. И вам нужно сделать свою активность full-screen.
По умолчанию AutoFillTextureView будет пытаться поддерживать соотношение сторон, поэтому он будет создавать черные полосы. Если вам не нужны черные полосы, вам придется изменить AutoFillTextureView, что не является простым, и я не буду вдаваться в него здесь.
Eddy правильно относится к соотношению сторон. Датчик камеры составляет 4: 3. Экран обычно 16: 9. Код образца позволяет показывать весь просмотр камеры, поэтому часть экрана не заполняется. Вам нужно растянуть, чтобы заполнить весь экран, однако в этом случае захваченные изображения включают области, не показанные в предварительном просмотре.
Для его просмотра в полноэкранном режиме, в AutoFitTextureView, изменить метод onMeasure к этому:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
if (0 == mRatioWidth || 0 == mRatioHeight) {
setMeasuredDimension(width, height);
} else {
if (width < height * mRatioWidth/mRatioHeight) {
// setMeasuredDimension(width, width * mRatioHeight/mRatioWidth);
setMeasuredDimension(height * mRatioWidth/mRatioHeight, height);
} else {
//setMeasuredDimension(height * mRatioWidth/mRatioHeight, height);
setMeasuredDimension(width, width * mRatioHeight/mRatioWidth);
}
}
}
Update: Как отметил Эдди, это покажет верхнюю левую часть камеры предварительного просмотра на в полноэкранном режиме, оставляя нижнюю и правую сторону вне поля зрения, результат заключается в том, что изображение находится вне центра. В моем конкретном случае объект должен быть центрирован по горизонтали, поэтому я модифицировал матрицу преобразования, чтобы центрировать объект горизонтально. Вот код:
// adjust the x shift because we are not showing the whole camera sensor on the screen, need to center the capture area
int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
Log.d(TAG, "screen width " + screenWidth);
int xShift = (viewWidth - screenWidth)/2;
matrix.setTranslate(-xShift, 0);
mTextureView.setTransform(matrix);
В качестве примечания это скорее всего не будет центрировать предварительный просмотр на экране - он будет отрезаться справа и внизу (хотя мне нужно будет точно проверить, как в этом случае расширяется содержащийся родительский родитель). Это может или не важно для вас. –
@EddyTalvala Вы правы в этом. Я модифицировал матрицу преобразования, чтобы центрировать предварительный просмотр. Обновлен образец кода в сообщении. – Ray
- 1. Непрерывный захват изображения с использованием Camera2 api
- 2. как показать полноэкранный просмотр изображения onlclick
- 3. Полноэкранный просмотр на широкоформатных мониторах
- 4. Android Camera2 Предварительный просмотр размеры вывода
- 5. Camera2 апи просмотр не совпадает с захватом
- 6. android camera2 обрабатывает каждый кадр и отображает его предварительный просмотр
- 7. Camera2Video Api полноэкранный просмотр и качество видео
- 8. Захват изображения с мобильных камер и предварительный просмотр перед загрузкой
- 9. iPad Полноэкранный режим Разрешить просмотр
- 10. Полноэкранный просмотр камеры2Basic Пример проекта
- 11. Xperia Z полноэкранный просмотр камеры?
- 12. Полноэкранный просмотр после захвата изображения в камеру в android
- 13. полноэкранный просмотр приложения flex Flex
- 14. Получить полноэкранный просмотр камеры iPhone?
- 15. Полноэкранный просмотр видео в recyclerview
- 16. Как сделать полноэкранный веб-просмотр
- 17. захват изображения и отображения
- 18. Захват и отображение изображения
- 19. Camera2 передняя камера предварительный просмотр вращение
- 20. Захват изображения с опорой
- 21. Сделать полноэкранный просмотр NSToolbarAccessoryView видимым при запуске
- 22. Android camera2 speed-up
- 23. Camera2 и Renderscript Allocations
- 24. Regex захват и просмотр назад опережение
- 25. Захват волейбола и растрового изображения
- 26. Растровые изображения и захват Android
- 27. Camera2 preview streched
- 28. Захват изображения на Android
- 29. Просмотр и просмотр файла изображения в Python
- 30. Как я могу сделать полноэкранный просмотр kinetic.js
Эдди, если вы знаете, как решить «захватить изображение с соотношением сторон 16: 9», можете ли вы добавить это к своему ответу или поместить ссылку на ответ? Я был Googling, но пока не повезло ... –
Я не уверен, что вы спрашиваете - вы имели в виду ссылку на какой-то другой вопрос StackOverflow? Если вы хотите записать 16: 9 JPEG, вам нужно выбрать разрешение 16: 9 для ImageReader, который вы используете для их захвата. –
Вот что я собирался попробовать дальше: http://stackoverflow.com/questions/26583489/android-5-0-wrong-crop-regions-on-preview-surface-and-captured-still-image Хорошо, Спасибо за ваш ответ. Я тоже попробую! –