我有一个PreviewView
,除了工具栏外,它都占据了整个屏幕。
相机的预览效果很好,但是当我捕获图像时,纵横比完全不同。
我想在成功捕获图像后向用户显示该图像,因此它的大小与PreviewView
相同,因此不必裁剪或拉伸(stretch)它。
是否可以更改长宽比,以便在每个设备上设置PreviewView
的大小,还是必须将其设置为固定值?
最佳答案
您可以在构建Preview
和ImageCapture
用例时设置其纵横比。如果在两个用例中都设置了相同的纵横比,则最终应获得与相机预览输出匹配的捕获图像。
示例:将Preview
和ImageCapture
的纵横比设置为4:3
Preview preview = new Preview.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_4_3)
.build();
ImageCapture imageCapture = new ImageCapture.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_4_3)
.build();
这样,您很可能最终仍会捕获到与PreviewView
显示的图像不匹配的图像。假设您没有更改PreviewView
的默认比例类型,它将等于ScaleType.FILL_CENTER
,这意味着除非相机预览输出的长宽比与PreviewView
匹配,否则PreviewView
将裁剪预览的一部分(顶部和底部) ,或左右两侧),导致捕获的图像与PreviewView
显示的图像不匹配。要解决此问题,您应该将PreviewView
的长宽比设置为与Preview
和ImageCapture
用例相同的长宽比。示例:将
PreviewView
的长宽比设置为4:3<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.camera.view.PreviewView
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="3:4"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>