Java CameraX中的1:1纵横比

Java CameraX中的1:1纵横比,java,android,android-layout,android-camera,androidx,Java,Android,Android Layout,Android Camera,Androidx,我一直在尝试在android应用程序中使用CameraX,希望预览和输出图像都是高质量的1:1纵横比图像。 我尝试了以下代码来设置图像和预览配置 PreviewConfig previewConfig = new PreviewConfig.Builder() .setTargetAspectRatio(new Rational(1, 1)) .build(); -- 根据开发人员指南,此代码将选择硬件在该纵横比下能够提供的最佳分

我一直在尝试在android应用程序中使用CameraX,希望预览和输出图像都是高质量的1:1纵横比图像。 我尝试了以下代码来设置图像和预览配置

PreviewConfig previewConfig = new PreviewConfig.Builder()
                .setTargetAspectRatio(new Rational(1, 1))
                .build();
--

根据开发人员指南,此代码将选择硬件在该纵横比下能够提供的最佳分辨率。 虽然这在某些设备上运行良好,但在某些设备上,输出图像分辨率低至280X280像素。 看起来这不是该设备上硬件的有效纵横比

我可以尝试什么解决方法? 我的想法是,我认为每台设备都支持4:3的纵横比

我可以裁剪输出图像,但是预览呢。我们可以裁剪纹理视图吗

或者我可以在取景器顶部放一个简单的黑色矩形视图,看起来像是1:1的图像吗?

你应该抱怨。支持率为1:1

你提出的缓解措施看起来是合理的。4:3在我见过的所有设备上提供高质量。始终可以使用一些不透明视图覆盖预览,以提供方形预览的外观


GitHub上有一个例子说明了如何实现。

使用摄像头API无法实现1:1的摄像头图片或视频您必须使用FFMPEG之类的库,或者如果您只拍摄图片,则必须在摄像头视图上覆盖一个视图,假装为1:1,然后以1:1的比例裁剪4:3的图像。您是如何解决此问题的@karatunoI做了与我在问题中提出的完全相同的黑客行为。我在取景器顶部使用了一个动态的黑色矩形视图,看起来像是1:1的图像,并在输出时对图像进行了裁剪。我知道这不是一个好办法,应该有更好的办法。但是我找不到一个,所以我用黑客的方式做了。如果你找到了更好的技术或更好的黑客,请一定要回答这个问题。
        ImageCaptureConfig imageCaptureConfig = new ImageCaptureConfig.Builder()
                .setTargetAspectRatio(new Rational(1, 1))
                .setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
                .build();