2014-08-27 3 views
4

У меня есть предварительный просмотр, который является WpxHp, я хочу снимать HxW-картинки, поэтому я хочу, чтобы пользователь увидел окно предварительного просмотра, имеющее такое же соотношение сторон изображения, которое я возьму , а не один из предварительного просмотра. Как обрезать предварительный просмотр с помощью TextureView?Android - Как обрезать просмотр камеры с помощью TextureView

- редактировать

, что я думал, что это использовать масштаб Матрицу, чтобы исказить изображение таким образом, чтобы cmpensate для TextureView изменения размера, позвольте мне объяснить лучше:
У меня есть цель предварительного просмотра (изображение) размер, который (W, H). Поэтому мне нужно изменить размер TextureView на (W, H). Это означает искажение, которое просто представляет собой неравномерное линейное масштабирование, представимое матрицей S. Поэтому, если я масштабирую изображение с помощью inv (S), прежде чем изменять размер представления, я должен получить те же оригинальные размеры Preview (при этом одинаковое соотношение сторон) но с изменением размера TextureView, и это эквивалентно обрезке. Я пробовал и, похоже, работает, но я ищу альтернативный путь

+1

Вы можете увидеть пример манипулирования предварительным просмотром камеры в Grafika - см. Деятельность «текстура из камеры». https://github.com/google/grafika – fadden

+0

благодарит за подсказку! это очень интересно. Однако он не использует компонент TextureView и, похоже, ничего не убирает, вместо этого ищет совпадение в поддерживаемых размерах предварительного просмотра. – LJSilver

+0

Используйте слайдеры для увеличения. Он эффективно обрезает исходное изображение и масштабирует его в соответствии с текущим размером кадра. TextureView и SurfaceView не очень актуальны; это просто выход GLES. – fadden

ответ

0

Единственное, что мне удалось сделать, и он работает хорошо - это добавить масштаб.

Я хотел создать текстуру с частью выходного сигнала камеры, но я не мог этого сделать, не дожидаясь предварительного просмотра.

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

mPreviewSize = chooseOptimalSize(...); 

int viewHeight = getDP(this, R.dimen.videoCaptureHeight); 
float scaleY = mPreviewSize.getHeight()/viewHeight; 
setScaleY(scaleY); 
Смежные вопросы