Я создал предварительный просмотр камеры на 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);
}