Как обрезать превью Camera2 без наложения объекта?

Я хочу обрезать превью камеры в Android с помощью camera2 api. Я использую официальный пример android-Camera2Basic.

Это результат, который я получаю Как обрезать превью Camera2 без наложения объекта?

И вот результат, которого я хочу добиться, - это Как обрезать превью Camera2 без наложения объекта?

Я не хочу накладывать объект на textureView. Я хочу, чтобы он действительно был такого размера, не растягиваясь.

0
0
477
1

Ответы 1

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

Для этого требуется довольно много шаблонов, поскольку вам нужно повторно реализовать большую часть TextureView. Для большей эффективности вы, вероятно, захотите реализовать обрезку в OpenGL ES; поэтому вам понадобится GLSurfaceView, а затем вам нужно будет использовать контекст OpenGL этого GLSurfaceView для создания объекта SurfaceTexture, а затем, используя эту текстуру, нарисовать четырехугольник с желаемым поведением обрезки во фрагментном шейдере.

Это довольно простой EGL, но его совсем немного, если вы никогда раньше не программировали OpenGL. В дереве ОС Android есть небольшая тестовая программа, которая использует такой путь: https://android.googlesource.com/platform/frameworks/native/+/master/opengl/tests/gl2_cameraeye/#

На самом деле, мне нужно снять отпечаток пальца, поэтому я должен сфокусировать палец перед камерой. Я заметил, что если изображение камеры заполнено полной рукой перед камерой, автофокус работает очень хорошо и фокусирует руку, но если я помещаю палец на такое же расстояние, он никогда не фокусируется. Вот почему я хочу уменьшить предварительный просмотр почти до ширины пальца, чтобы я мог заполнить весь предварительный просмотр и получить идеальную автофокусировку. Я обязательно рассмотрю это решение, которое вы предоставили. Пожалуйста, предложите мне лучший подход, если он есть. Спасибо.

Muhmmad Abubakar Ikram 23.07.2018 22:24

Если вы хотите направить автофокус на определенную область, вы можете использовать элемент управления developer.android.com/reference/android/hardware/camera2/…. Обрезка предварительного просмотра после захвата не влияет на то, на чем камера пытается сфокусироваться.

Eddy Talvala 25.07.2018 23:29

@EddyTalvala, к сожалению, ваша ссылка в исходном ответе не работает. не могли бы вы отредактировать это? Я с трудом понимаю, как обрезать каждый кадр (из-за движущегося окна обрезки) потока камеры перед его предварительным просмотром - никогда не делал openGL - с чего мне начать? все было бы хорошо! открытая награда: stackoverflow.com/questions/62375930/…

Suisse 04.11.2020 04:18

Простите за это! Я исправил ссылку на android.googlesource.com/platform/frameworks/native/+/master‌ /…

Eddy Talvala 04.11.2020 20:41

Другие вопросы по теме