Соотношение сторон экрана камеры Android - PullRequest
0 голосов
/ 18 октября 2018

Я создал предварительный просмотр камеры на Android на основе описанного здесь примера: https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java

Я рассчитал поле зрения камеры и размеры обзора.Чтобы упростить проблему, я сохранил ширину вида как базовую и масштабировал вертикальный размер в соответствии с коэффициентом поля зрения.Ширина результата = 1080px и высота = 1374px.Это соотношение отображает изображение с камеры без искажений, поэтому оно кажется реальным 1: 1, как я и ожидал.

Я изменил ширину на одну четвертую (270 пикселей) и сохранил высоту (1374 пикселей), но хотел сохранитьСоотношение 1: 1, обрезая изображение.Я умножил значение x изображения на 4, чтобы достичь цели.После масштабирования соотношение не 1: 1, изображение становится шире.Приблизительное умножение примерно на 3 приведет к соотношению 1: 1.

Что не так?

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

private void configureTransform(int viewWidth, int viewHeight) {
    Matrix matrix = new Matrix();
    RectF viewRect = new RectF(0, 0, viewWidth, viewHeight);
    float centerX = viewRect.centerX();
    float centerY = viewRect.centerY();

    Camera.FOV cameraFov = getCameraFOV(); // it calculates with the 90 degree rotation of the camera
    float ratioFov = cameraFov.horizontal / cameraFov.vertical; // = 0.7859
    float ratioView = (float) viewWidth / viewHeight; // = 0.1965

    if (ratioFov > ratioView) {
        matrix.postScale(ratioFov / ratioView, 1, centerX, centerY); // this branch evaluated; ratioFov / ratioView = 4
    } else {
        matrix.postScale(1, ratioView / ratioFov, centerX, centerY);
    }

    mTextureView.setTransform(matrix);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...