5

我最近正在开发 Camera 2 API,我的设备的屏幕比例为 16:9,但我的相机传感器为 4:3。所以我得到的所有预览尺寸都是 4:3。我想知道有什么办法可以裁剪大小并且只显示 16:9 部分?我尝试了很长时间,但没有找到相机 2 的任何帮助。

我当前的相机代码类似于相机 2 基本示例

那么我应该如何裁剪预览并且只在纹理视图上显示 16:9 部分呢?

谢谢!!

4

3 回答 3

1

在遇到同样的问题后,我回答了一个类似的问题,并且无法更改实际视图的纵横比以匹配相机输出(正如 Sulfkain 的回答所暗示的那样)。

Tl ; dr:答案在于configureTransformCamera2BasicFragment 尽管它们的功能主要是针对方向实现的,但缩放矩阵可以解决与相机输出形状错误的视图的缩放/纵横比问题。

于 2018-08-28T06:45:47.643 回答
0

您可以使用 4:3 而不是 16:9 创建一个SurfaceTexture比例。

您可以使用该示例项目中的自定义视图,也可以使用新视图创建自己的视图,ConstraintLayout并将高度比设置为宽度的 16:9(或相反)。

然后,当您设置纹理的大小时:

texture.setDefaultBufferSize(width, height)

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

希望这可以帮助

于 2018-02-14T10:35:55.607 回答
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);

也许你必须在那里艰难地选择一些东西。

于 2018-02-14T10:44:27.887 回答