Android - 如何使用TextureView裁剪相机预览

4
我有一个WpxHp的预览窗口,我想要拍摄HxW的照片,因此我希望用户看到的预览窗口具有与我将要拍摄的照片相同的宽高比,而不是预览窗口的宽高比。如何使用TextureView裁剪预览窗口?
--编辑
我的想法是使用缩放矩阵来扭曲图像,以便补偿TextureView的调整大小,让我解释得更清楚一些: 我有一个目标预览(图像)大小为(W,H)。因此,我需要将TextureView调整为(W,H)。这意味着一种畸变,简单地说就是非均匀线性缩放,可以用矩阵S表示。因此,如果我在调整视图大小之前使用inv(S)缩放图像,则应该获得与预览相同的原始尺寸(因此具有相同的宽高比),但是TextureView已调整大小,这相当于裁剪。 我尝试过了,似乎可以工作,但我正在寻找另一种方法。

1
您可以在 Grafika 中查看操作相机预览的示例--请参见“来自相机的纹理”活动。https://github.com/google/grafika - fadden
谢谢提示!这很有趣。然而它没有使用TextureView组件,似乎也没有裁剪任何东西,而是在支持的预览尺寸中搜索匹配项。 - LJSilver
使用滑块进行“缩放”。它实际上是裁剪源图像,并将其缩放以匹配当前帧大小。TextureView与SurfaceView并不相关;它只是GLES输出。 - fadden
@mb_ 你找到解决方案了吗?因为我也遇到了同样的问题,但是没有能够得出结果。如果你已经找到了解决方案,请与我们分享。谢谢。 - Bilal Rabbani
1个回答

0

我唯一成功的是添加了一个比例尺。

我想创建一个带有相机输出部分的纹理视图,但是如果不让预览缩放,我无法做到这一点。

因此,在决定相机/屏幕比率的最佳分辨率开始捕获后,我获取相机捕获高度和我想要显示的高度之间的比例。

mPreviewSize = chooseOptimalSize(...);

int viewHeight = getDP(this, R.dimen.videoCaptureHeight);
float scaleY = mPreviewSize.getHeight() / viewHeight;
setScaleY(scaleY);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接