Camera2 中的前置摄像头未捕获图像

2024-05-29

我有 Camera2 的代码https://github.com/googlesamples/android-Camera2Basic https://github.com/googlesamples/android-Camera2Basic.

我面临的问题是,当我转向前置摄像头时,我无法拍摄照片,但使用后置摄像头可以正常工作。

有谁实现了 Camera2 Api 请帮忙!

这是代码片段:

private void setUpCameraOutputs(int width, int height) {
    Activity activity = getActivity();
    CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
    try {
        for (String cameraId : manager.getCameraIdList()) {
            CameraCharacteristics characteristics
                    = manager.getCameraCharacteristics(cameraId);

            // We don't use a front facing camera in this sample.
            int facing = characteristics.get(CameraCharacteristics.LENS_FACING);
            Log.i(TAG,"Front Cam ID: "+ facing);
            if (characteristics.get(CameraCharacteristics.LENS_FACING)==CameraCharacteristics.LENS_FACING_FRONT)
            {



                StreamConfigurationMap map = characteristics.get(
                        CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);


                // For still image captures, we use the largest available size.
                Size largest = Collections.max(
                        Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)),
                        new CompareSizesByArea());
                mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(),
                        ImageFormat.JPEG, /*maxImages*/2);
                mImageReader.setOnImageAvailableListener(
                        mOnImageAvailableListener, mBackgroundHandler);

                // 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),
                        width, height, largest);

                // We fit the aspect ratio of TextureView to the size of preview we picked.
                int orientation = getResources().getConfiguration().orientation;
                if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                    mTextureView.setAspectRatio(
                            mPreviewSize.getWidth(), mPreviewSize.getHeight());
                } else {
                    mTextureView.setAspectRatio(
                            mPreviewSize.getHeight(), mPreviewSize.getWidth());
                }

                mCameraId = cameraId;
                return;
            }
            else
            {
                onActivityCreated(Bundle.EMPTY);
            }
        }
    } catch (CameraAccessException e) {
        e.printStackTrace();
    } catch (NullPointerException e) {
        // Currently an NPE is thrown when the Camera2API is used but not supported on the
        // device this code runs.
        ErrorDialog.newInstance(getString(R.string.camera_error))
                .show(getChildFragmentManager(), FRAGMENT_DIALOG);
    }
}

问题是许多前置摄像头都有一个固定焦距。所以在自动对焦触发后lockFocus()自动对焦状态(CONTROL_AF_STATE https://developer.android.com/reference/android/hardware/camera2/CaptureResult.html#CONTROL_AF_STATE)仍然是INACTIVE并且自动对焦触发器什么也不做。

因此,为了使其正常工作,您需要检查是否支持自动对焦。为此,请将以下内容添加到setUpCameraOutputs():

int[] afAvailableModes = characteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES);

if (afAvailableModes.length == 0 || (afAvailableModes.length == 1
        && afAvailableModes[0] == CameraMetadata.CONTROL_AF_MODE_OFF)) {
    mAutoFocusSupported = false;
} else {
    mAutoFocusSupported = true;
}

最后,如果拍照时不支持,请不要锁定焦点:

private void takePicture() {
    if (mAutoFocusSupported) {
        lockFocus();
    } else {
        captureStillPicture();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Camera2 中的前置摄像头未捕获图像 的相关文章

随机推荐

  • 更改目录时 Gitlab CI 运行程序作业失败退出状态 1

    我正在使用我的个人机器作为使用 Fastlane 的 iOS 项目的运行程序 这主要是因为共享运行器没有为 iOS 设置 因为它们没有安装 Xcode 更改目录时我的作业立即失败 它是一个 shell 运行程序 根本没有其他自定义配置 有什
  • 获取颜色位置的深度,Kinect SDK

    我正在寻找方法 尽快 从 Kinect 相机获取颜色像素的相应深度 我找到了 MapDepthFrameToColorFrame 函数 但这只给我特定深度位置的颜色 我想要相反的颜色 我想要这个的原因是我将能够单击 RGB 图像上的某个位置
  • 从 HTML 字符串中解析和选择

    使用 ajax 调用 我返回了页面的partialView HTML 但在显示它之前 我希望从主 div 中提取信息 如果我创建一个浮动窗口 该数据只是大小信息 Code div class window details more data
  • 通过 apache 代理运行 socket.io 的问题

    最近我从使用端口号转向 apache 代理 现在我收到以下浏览器控制台错误 VM6 1 获取400 错误请求 VM6 1 后400 错误请求 我的 apache 日志文件充满了这些消息 Mon Mar 02 18 25 03 199849
  • 如何打开新选项卡并更改当前页面

  • 未捕获的引用错误:在 karma start karma.conf.js 上未定义 require

    使用 Karma 和 Jasmine 对 Rails 应用程序的 Angular 前端进行单元测试 看来我已经做了所有已知的事情来解决这个错误 并且我的 package json 中留下了一百万个依赖项 这是我的 Karma conf js
  • Visual Studio 2010 Web 部署任务失败

    我正在尝试使用 VS2010 的一键发布功能将测试站点从我的笔记本电脑部署到我的服务器 我已关闭两台计算机上的防火墙 并且 MS 部署服务已在我的笔记本电脑和服务器上启动并运行 但是 当我尝试在笔记本电脑上从 VS2010 发布时 出现以下
  • Laravel 5 包中依赖注入的最佳方法

    我正在为 Laravel 5 开发一个包 现在我需要受益于依赖注入来拥有一个更具可扩展性和可靠性的应用程序 我不知道最好采用哪种方法以及为什么 这是我的一段代码 我需要注射Lang类依赖 class MyController extends
  • 将 Bootstrap CSS 中的列表居中[重复]

    这个问题在这里已经有答案了 重复报告后编辑 抱歉 我认为建议的重复项实际上可能是重复项 我先尝试了一下 但它对我不起作用 因此出现了一个新问题 再次查看新的建议答案后 我意识到我的问题可能与我正在使用的工具 codepen io 的开箱即用
  • 通过函数传递自定义比较器

    我有一个带有函数的类 MyClass doStuff std vector
  • 列出自定义类成员和类型

    这似乎是最基本的事情 但不知何故我找不到答案 也无法弄清楚 假设我有一个自定义类 public class WineCellar public string year public string wine public double nrb
  • 谷歌分析与 Ionic

    我正在尝试使用 Google Analytics 添加到 Ionic phonegap Covdova 应用程序中this https blog nraboy com 2014 06 using google analytics ionic
  • 升级到 Gitlab 6.0 后图形丢失

    昨天 我将 Gitlab 安装从 5 3 升级到 6 0 技术上从 5 3 升级到 5 4 从 5 4 升级到 6 0 从那时起我无法显示网络和其他图表 在网络页面上 似乎有些 JavaScript 未加载 因为我收到 网络未定义 错误 图
  • 在 C++ 中使用 istringstream 时“因一个错误而关闭”

    执行以下代码时出现一个错误 include
  • Java Web Start 的证书已过期

    JWS 对代码签名证书过期有何反应 根据我的观察 它似乎忽略了 CA 签名证书的到期日期 但我想找到一些确凿的证据 例如官方文档 来证实这一点 如果签名的 jar 被赋予时间戳 来自时间戳权威 那么即使在证书过期之后签名仍然有效 假设时间戳
  • 电子无声打印

    我目前正在构建一个电子应用程序 我的本地文件系统上有一个 PDF 我需要以静默方式打印出来 在默认打印机上 我遇到了节点打印机库 但它似乎对我不起作用 有没有一个简单的解决方案可以实现这一目标 首先 几乎不可能理解 无声 打印的含义 因为一
  • 如何从列中创建对称矩阵?

    例如 我想转动以下列 90 175 600 650 655 660 代入矩阵 90 175 600 650 655 660 175 600 650 655 660 655 600 650 655 660 655 650 650 655 66
  • 如何使用 Installshield 动态自定义 MSI 文件属性中的产品版本

    我正在使用 Installshield 2019 生成基本的 MSI 文件 我想自定义 Windows 资源管理器文件属性中显示的文件属性 在详细信息选项卡 gt 标题 主题 评论中 遗憾的是 而且奇怪的是 产品版本没有出现在我生成的 MS
  • PostgreSQL & regexp_split_to_array + 取消嵌套

    我有这样的绳子 测试1 纽约 X 测试 2 芝加哥 Y 测试 3 宾夕法尼亚州哈里斯堡 Z 我需要的结果是 Column1 Column 2 Column3 Test 1 new york X Test 2 chicago Y Test 3
  • Camera2 中的前置摄像头未捕获图像

    我有 Camera2 的代码https github com googlesamples android Camera2Basic https github com googlesamples android Camera2Basic 我面