Android Camera2 для предварительного просмотра и захвата с соотношением сторон 4: 3, но ширина> высота - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь добиться нестандартного размера камеры (предварительный просмотр и захват) с помощью Camera2 API.В частности, соотношение 4: 3, но предварительный просмотр (ширина> высота).

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

Попытка установки SCALER_CROP_REGION с кодом нижено без эффекта.

val sensorRect = cameraCharacteristics
    .get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE)
    ?: return@run

val sensorWidth = sensorRect.width()

val sensorToViewRatio = sensorWidth / preview.width.toFloat()

val sensorBottom = (preview.height * sensorViewRatio).roundToInt() + sensorRect.top

previewRequestBuilder.set(
    CaptureRequest.SCALER_CROP_REGION,
    Rect(sensorRect.left, sensorRect.top, sensorRect.right, sensorBottom)
)

Также пробовал textureView.setTransform(matrix) с setRectToRect и postScale, но не повезло.Это обрезало саму поверхность предварительного просмотра, но фактический предварительный просмотр все еще сжимается.

Каков правильный и рекомендуемый способ достижения такого вида пользовательского предварительного просмотра и размера захвата?

Я проснулся на улучшенномверсия Google CameraView Library .

Библиотека CameraViewEx кодовая база, над которой я работаю, может быть найдена здесь .

Ниже приведены классы, которые могут иметь отношение к достижению предполагаемого поведения.

1 Ответ

0 голосов
/ 26 января 2019

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

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

Как правило, вы не можете сделать это без добавления черных полос для предварительного просмотра (в данном случае, слева и справа) или без кадрирования и масштабирования (удаляя большой процент поля зрения; около 45% для формата 4: 3).

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

...