使用 TextureView 旋转相机流会裁剪图像

Rotating camera stream with TextureView crops the image

我正在使用的设备中的相机 returns 旋转图像(横向 16:9)。为了获取流,我使用 Camera2 API and for projection I use TextureViewTextureView 是固定大小。当我尝试使用 Matrix 旋转它时,它会导致图像被裁剪。

这是轮换前的内容:

然后我旋转它并像这样调整 TextureView 大小:

private fun updateTransform() {
    val matrix = Matrix()
    val centerX = textureView.width / 2f
    val centerY = textureView.height / 2f
    matrix.postRotate(90.toFloat(), centerX, centerY)
    textureView.setTransform(matrix)
    textureView.layoutParams = FrameLayout.LayoutParams(textureView.width, textureView.height)
}

结果如下图:

我想要拉伸图像以填充 TextureView。需要注意的重要一点是,我不需要考虑设备旋转,因为它始终是纵向的。我也只为一台设备编程,所以我不需要考虑不同的相机类型等。

如何在不裁剪图像的情况下旋转图像?

这个转换解决了我的问题:

    private fun transformTexture() {
    val adjustment = Matrix()
    val centerX = textureView.width / 2f
    val centerY = textureView.height / 2f

    val scalex = textureView.width.toFloat() / textureView.height.toFloat()
    val scaley = textureView.height.toFloat() / textureView.width.toFloat()

    adjustment.postRotate(90F, centerX, centerY)
    adjustment.postScale(scalex, scaley, centerX, centerY)

    textureView.setTransform(adjustment)
}