如何设置 3:4 纵横比 Flutter 相机预览

Posted

技术标签:

【中文标题】如何设置 3:4 纵横比 Flutter 相机预览【英文标题】:How to set 3:4 Aspect Ratio Flutter camera preview 【发布时间】:2019-12-06 05:51:05 【问题描述】:

我正在开发 Flutter 应用程序。我需要相机功能并决定为此使用Camera Plugin。我将纵横比设置为 3:4,但图像变形且小于应有的大小。我认为规模有问题。设置相机纵横比的正确方法是什么(即 3:4)。

final size = MediaQuery.of(context).size;
final deviceRatio = size.width / size.height;
final aspectRatio=3/4;

Transform.scale(
        scale: controller.value.aspectRatio / deviceRatio,
        child: Center(
          child: AspectRatio(
              aspectRatio: aspectRatio,
              child: CameraPreview(controller),
          )
        ),
      )

【问题讨论】:

【参考方案1】:

我这样解决了我的问题

final size = MediaQuery.of(context).size.width;

Transform.scale(
                scale: 1.0,
                child: AspectRatio(
                  aspectRatio: 3.0 / 4.0,
                  child: OverflowBox(
                    alignment: Alignment.center,
                    child: FittedBox(
                      fit: BoxFit.fitWidth,
                      child: Container(
                        width: size,
                        height: size / controller.value.aspectRatio,
                        child: Stack(
                          children: <Widget>[
                            CameraPreview(controller),
                          ],
                        ),
                      ),
                    ),
                  ),
                ),
              )

【讨论】:

非常好的解决方案。就我而言,我使用横向模式,然后将纵横比更改为 4/3 而不是 3/4。它工作正常。谢谢兄弟。【参考方案2】:
RotatedBox(
              quarterTurns:
                  MediaQuery.of(context).orientation == Orientation.landscape
                      ? 3
                      : 0,
              child: Transform.scale(
                scale: 1.0,
                child: AspectRatio(
                  aspectRatio: 3.0 / 4.0,
                  child: OverflowBox(
                    alignment: Alignment.center,
                    child: FittedBox(
                      fit: BoxFit.fitWidth,
                      child: Container(
                        width: size,
                        height: size / cameraController.value.aspectRatio,
                        child: Stack(
                          children: <Widget>[
                            CameraPreview(cameraController),
                          ],
                        ),
                      ),
                    ),
                  ),
                ),
              ),
            )

【讨论】:

以上是关于如何设置 3:4 纵横比 Flutter 相机预览的主要内容,如果未能解决你的问题,请参考以下文章

android相机预览错误的纵横比

确保相机预览大小/纵横比与生成的视频相匹配

如何在平方 SurfaceView(如 Instagram)中将相机预览大小设置为平方纵横比

相机在纵向模式下设置 Display Orientation() 会破坏纵横比

如何在Android中修复相机预览(surfaceview)的正确纵横比?

计算最佳相机预览尺寸的正确方法保持纵横比