标签: android-camera2

Android Camera2 手动闪光并不总是有效

我在 Android 6.1、sdk 23 上使用新的camera2 api。

我有两个请求:预览和静态图像捕获请求。我想让闪光灯在每次静止图像请求时关闭,但没有任何预闪光。现在,我的请求如下所示:

CaptureRequest.Builder requester = mCameraDevice.createCaptureRequest(mCameraDevice.TEMPLATE_STILL_CAPTURE);
        requester.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
        requester.set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE);
        requester.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED);
        requester.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL);
        requester.addTarget(mCaptureBuffer.getSurface());

mCaptureSession.capture(requester.build(), null, null);
Run Code Online (Sandbox Code Playgroud)

它似乎适用于一部手机(摩托罗拉 Moto G),但不适用于另一部手机(Nexus 5 - 闪光灯根本无法打开)。我知道 Nexus 的闪光灯可以工作,因为我可以用其他相机应用程序触发它,所以我猜有一些默认值我没有设置。

还有另一种方法可以做到这一点/我可以设置更多标志吗?

谢谢!

编辑:


事实证明,我遇到的很多麻烦都源于使用仅LIMITED支持camera2的设备。仅仅因为您可以使用相机 2 访问相机并不意味着您可以控制所有功能。查看答案以了解更多信息

android android-camera android-camera2

2
推荐指数
1
解决办法
4871
查看次数

Android Camera2 API 预览有时会失真

我正在使用 Camera2 API 构建自定义相机。到目前为止,除了预览有时会失真之外,相机工作得很好。假设我连续打开相机 7 次。所有尝试均成功,但第 8 次相机预览失真。看起来它使用宽度作为高度,反之亦然。

我的代码基于camera2 的Google 示例实现,可以在此处找到。有趣的是,即使是 Google 示例实现有时也会出现这种扭曲的预览。我尝试修改 AutoFitTextureView 但没有成功。我目前正在使用 Google 再次提供的 AutoFitTextureView.java 。

可以在此处找到与此类似的帖子。然而,所提出的修复方案并没有解决问题。

我可以通过更改 setUpCameraOutputs 方法中的以下内容来重现该问题:

mTextureView.setAspectRatio(mPreviewSize.getHeight(), mPreviewSize.getWidth());
Run Code Online (Sandbox Code Playgroud)

到:

mTextureView.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight());
Run Code Online (Sandbox Code Playgroud)

另一个奇怪的事情是,每当预览失真时,您只需按主页按钮,应用程序就会进入 onPause() 并再次打开应用程序,以便调用 onResume() ,每次预览都是完美的。

这里有人遇到过这个问题并找到解决办法吗?

提前致谢

android preview distortion camera2 android-camera2

2
推荐指数
1
解决办法
2884
查看次数

调用 session.setRepeatingRequest(captureRequestBuilder.build(), null, backgroundHandler) 时 Camera2 API 出错

我正在尝试制作相机预览应用程序。当我打电话

session.setRepeatingRequest(captureRequestBuilder.build(), null, backgroundHandler)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

E/HandlerDispatcher: IllegalArgumentException while invoking public abstract void android.hardware.camera2.CameraCaptureSession$StateCallback.onConfigured(android.hardware.camera2.CameraCaptureSession)
    java.lang.IllegalArgumentException: Each request must have at least one Surface target
        at android.hardware.camera2.impl.CameraDeviceImpl.submitCaptureRequest(CameraDeviceImpl.java:934)
        at android.hardware.camera2.impl.CameraDeviceImpl.setRepeatingRequest(CameraDeviceImpl.java:993)
        at android.hardware.camera2.impl.CameraCaptureSessionImpl.setRepeatingRequest(CameraCaptureSessionImpl.java:239)
        at anthe.rwca.org.robocup19.MainActivity$3.onConfigured(MainActivity.java:147)
        at java.lang.reflect.Method.invoke(Native Method)
        at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
        at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {
        @Override
        public void onOpened(@NonNull CameraDevice camera) {
            cameraDevice = camera;
            createCaptureSession();
        }

        @Override
        public void onDisconnected(@NonNull CameraDevice camera) {

        }

        @Override
        public void onError(@NonNull CameraDevice camera, int …
Run Code Online (Sandbox Code Playgroud)

android android-camera2

2
推荐指数
1
解决办法
1938
查看次数

如何让camera2 api再次工作?

我正在使用 Xamarin/Android (不是 Forms),尝试将camera2basic api 示例集成到我的项目中。 https://developer.xamarin.com/samples/monodroid/android5.0/Camera2Basic/

我在示例中没有进行任何更改,我只对使用主摄像头和拍摄快照感兴趣。

我的项目有一个 MainActivity,camera2 是它的片段之一,我这样调用:

 string fragmentTag = this.Resources.GetString(Resource.String.camera_form);

 // Begin the transaction
 FragmentTransaction trans = this.FragmentManager.BeginTransaction();

 // Replace the old fragment with the new one.
 trans.Add(Resource.Id.fragment_container, camera2BasicFragment, fragmentTag);

 // Add the transaction to the back stack.
 // The tag is added so we can use PopBackStack to skip a screen on the back key
 trans.AddToBackStack(fragmentTag);

 // Don't forget to commit
 trans.Commit();
Run Code Online (Sandbox Code Playgroud)

一切都是第一次。它拍摄照片并将其保存到文件夹中。

我第二次运行它时,它显示预览,然后当我拍照时它在这里崩溃,抛出的位置是:

  public void CaptureStillPicture()
  {
     try
     {
        var activity = Activity; …
Run Code Online (Sandbox Code Playgroud)

xamarin android-camera2

2
推荐指数
1
解决办法
1812
查看次数

带有相机 2 库的 Android 应用程序在 SDK19 启动时崩溃

我在我的应用程序中使用 androidx.camera.camera2 库。此库适用于 SDK 21 及更高版本。但我希望允许用户在不支持 camera2 的情况下启动 SDK 19 的应用程序。我在代码中检查 SDK 版本,但应用程序在启动时崩溃。我可以从旧 SDK 的依赖项中排除 camera2 吗?

05-30 12:13:42.318 2000-2000/com.myapp.android E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.myapp.android, PID: 2000
java.lang.NoClassDefFoundError: android.util.Size
    at androidx.camera.camera2.impl.Camera2DeviceSurfaceManager.<clinit>(Camera2DeviceSurfaceManager.java:53)
    at androidx.camera.camera2.Camera2AppConfig.create(Camera2AppConfig.java:58)
    at androidx.camera.camera2.impl.Camera2Initializer.onCreate(Camera2Initializer.java:44)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:1591)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:1562)
    at android.app.ActivityThread.installProvider(ActivityThread.java:4790)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4385)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4325)
    at android.app.ActivityThread.access$1500(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5017)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

sdk android android-camera2

2
推荐指数
1
解决办法
1112
查看次数

CameraX - 当活动锁定在纵向模式时仅旋转预览

  1. 设置->手机固定在支架上,无法旋转。摄像头正对着笔记本

  2. MyCameraActivity -> 固定方向 -> 肖像

  3. 用户应该能够通过单击按钮来旋转预览,即我的预览应该旋转(例如,如果我在开头看到向上箭头,那么单击用户应该能够旋转右侧箭头)

我能够在camera2中执行此操作,但找不到有关cameraX的任何有用信息。

android android-camera2 android-camerax

2
推荐指数
1
解决办法
1193
查看次数

配置CameraX(闪光模式、自动白平衡模式、动作模式等)

我已经成功实现了 CameraX,但是,我仍停留在配置其设置上。我想设置自动白平衡、降噪、闪光和对焦模式(就像在 Camera2 中一样)。到目前为止,我在 SO 上发现的唯一内容仅涉及 Camera2,官方文档也没有告诉我太多信息。是否可以在 CameraX 上设置这些模式,或者到目前为止仅支持 Camera2?

android android-camera2 android-camerax

2
推荐指数
1
解决办法
2481
查看次数

Android camera2镜头内在校准

我下载了一个Android camera2 演示版,运行良好.

现在我想通过查询CameraCharacteristics来获取相机的内在矩阵.

我的代码是

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);
            float[] intrinsic = new float[5];
            intrinsic = characteristics.get(CameraCharacteristics.LENS_INTRINSIC_CALIBRATION);
    //...... leave out the following part
        }
    }
Run Code Online (Sandbox Code Playgroud)

内部函数应该是一个5元素数组,但intrinsic = characteristics.get(CameraCharacteristics.LENS_INTRINSIC_CALIBRATION)返回null.

java android android-hardware android-camera android-camera2

1
推荐指数
1
解决办法
1210
查看次数

camera2拍摄的照片模糊不清

在三星Galaxy S7边缘设备上拍摄照片时,我遇到了不良行为.

在拍摄照片之前,我同时等待对焦和曝光,但最后我与原生相机应用程序输出相比,有一种模糊的图像.

该问题在缩放图像上尤其明显,但在未缩放时也存在.我也试图启用光学图像稳定,但问题并没有解决.

下面是解释问题的链接示例图像.

原生相机图像

我的相机图片

这是代码:

图片捕获步骤1的方法:

public void capturePicture() {
    CameraState state = getState();
    if (state != IDLE && state != CLOSING && state != TAKE_PICTURE) {
            boolean af = false;
            boolean ae = false;
            if (isAFEnabled()) {
                af = true;
            } else if (isAEEnabled()) {
                ae = true;
            }

            if (!af && !ae) {
                takePicture();
            } else {
                triggerFocusAndExposure(true);
            }
    }

    return;
}
Run Code Online (Sandbox Code Playgroud)

触发焦点和曝光的方法:

private void triggerFocusAndExposure(boolean picture) {
    setState(WAIT_PRECAPTURE_PICTURE);

    if (isAFEnabled()) {
        previewBuilder.set(CONTROL_AF_TRIGGER, CONTROL_AF_TRIGGER_START);
    } …
Run Code Online (Sandbox Code Playgroud)

android android-camera2

1
推荐指数
1
解决办法
1388
查看次数

相机和camers2 API之间有什么区别

我正在开发一个应用程序,我试图在移动视觉API的帮助下扫描条形码.我TextureView在我的活动中创建,所以我需要相机在`TextureView上渲染.

我一直在使用旧的相机API,只是遇到了新的camera2 API.谁能帮助我,他们之间有什么区别?

android android-camera android-camera2

1
推荐指数
1
解决办法
2454
查看次数