Android相机2,如何裁剪预览大小

5
我最近在研究相机2 API,我的设备屏幕比例为16:9,但相机传感器为4:3。因此,我得到的所有预览尺寸都是4:3。我想知道是否有办法裁剪尺寸并仅显示16:9部分?我尝试了很久,但没有找到任何有关相机2的帮助。
我的当前相机代码类似于相机2基本示例
那么,我应该如何裁剪预览并仅在纹理视图上显示16:9部分?
谢谢!!

这个问题的答案在链接中提供:Android 5.0 Wrong crop regions on preview surface and captured still image - Chandana
3个回答

1

在遇到相同问题时,我回答了一个类似的问题,并且无法更改实际视图的宽高比以匹配相机输出(正如Sulfkain的答案所建议的那样)。

Tl;dr:答案在Camera2BasicFragment中的configureTransform中。 尽管它们的功能主要用于方向,但缩放矩阵可以解决视图与相机输出不匹配的缩放/宽高比问题。


1
你可以使用比例为4:3的SurfaceTexture,而不是16:9。
你可以使用示例项目中的自定义视图或创建自己的视图,并使用新的ConstraintLayout设置高度与宽度的16:9比例(或反比例)。
然后在设置纹理的大小时:
texture.setDefaultBufferSize(width, height)

你不会遇到拉伸问题,因为你的纹理与相机输出具有相同的比例。

希望这可以帮助到你。


0

你需要对 setUpCameraOutputs(int width, int height) 进行一些调试,并检查你选择输出大小的部分。

// Danger, W.R.! Attempting to use too large a preview size could  exceed the camera
// bus' bandwidth limitation, resulting in gorgeous previews but the storage of
// garbage capture data.
mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), rotatedPreviewWidth, 
rotatedPreviewHeight, maxPreviewWidth, maxPreviewHeight, largest);

也许你需要在那里进行强制选择。


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