Android Camera2 API中JPEG_QUALITY不可用。

3

我正在尝试使用 Android Camera2 APIs 在我的 Nexus 5x 上开发,并且我正在使用 googlesamples android-Camera2Basic 示例。

我的问题是 JPEG 图片的质量太低,而且它们的大小比我使用手机相机应用程序拍摄的常规图片要小得多。

根据 Google 文档,CaptureRequest 和 CaptureResult 中都应该有一个名为 JPEG_QUALITY 的关键字:

JPEG_QUALITY

API 级别:21+

关键字:JPEG_QUALITY

最终 JPEG 图像的压缩质量。

85-95 是典型的使用范围。

有效值范围:

1-100;越大则品质越高。

此关键字对所有设备都可用。

然而,当我询问可用的关键字时,关键字 JPEG_QUALITY 不可用,因此我不知道当前使用的 JPEG 压缩质量是多少,以及如何更改它。

下面是我的代码:

CameraCaptureSession.CaptureCallback CaptureCallback
                = new CameraCaptureSession.CaptureCallback() {

            @Override
            public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                                           @NonNull CaptureRequest request,
                                           @NonNull TotalCaptureResult result) {

               
                //_TEST_DEBUG
                List<CaptureRequest.Key<?>> requestKeys = request.getKeys();
                List<CaptureResult.Key<?>> resultKeys = result.getKeys();

requestKeys和resultKeys有许多键,包括JPEG_ORIENTATION,但没有JPEG_QUALITY键。

我做错了什么?为什么找不到如何更改JPEG压缩质量的方法?

谢谢, Guy

1个回答

9

我成功地通过将JPEG质量添加为CaptureRequest.Builder中的键,使用Tesco Hudl 2平板电脑上的googlesamples android-Camera2Basic应用程序并运行在Android 5.1 Lollipop系统上以增加其质量。

JPEG质量在Camer2BasicFragment的captureStillPicture()方法中设置,如下所示:

        // This is the CaptureRequest.Builder that we use to take a picture.
        final CaptureRequest.Builder captureBuilder =
                mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
        captureBuilder.addTarget(mImageReader.getSurface());

        //Set the JPEG quality here like so
        captureBuilder.set(CaptureRequest.JPEG_QUALITY, (byte)90);

我希望这能有所帮助。

是的,这正是我要找的,但是也许你知道为什么如果我设置质量为“100”,保存的图像质量却只有96? - Sirop4ik
不好意思,您能告诉我您是如何发现压缩质量的吗?这样我就可以尝试在我的设备上复制您的结果了。 - BlinkingCahill
我通过JPEGsnoop的帮助发现了它……如果可以的话,请用您的设备试一试。谢谢! - Sirop4ik
@BlinkingCahill:当我添加代码captureBuilder.set(CaptureRequest.JPEG_QUALITY, (byte)90);时,图像质量仍然很低。我使用其他应用程序,它的质量很好。 - user3051460
@user3051460 你最终使用的解决方案是什么?它是否可以在camera2实现中使用? - Emmanuel Buckshi

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