我在 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 访问相机并不意味着您可以控制所有功能。查看此答案以了解更多信息 我正在使用 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() ,每次预览都是完美的。
这里有人遇到过这个问题并找到解决办法吗?
提前致谢
我正在尝试制作相机预览应用程序。当我打电话
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) 我正在使用 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) 我在我的应用程序中使用 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) 设置->手机固定在支架上,无法旋转。摄像头正对着笔记本
MyCameraActivity -> 固定方向 -> 肖像
用户应该能够通过单击按钮来旋转预览,即我的预览应该旋转(例如,如果我在开头看到向上箭头,那么单击用户应该能够旋转右侧箭头)
我能够在camera2中执行此操作,但找不到有关cameraX的任何有用信息。
我已经成功实现了 CameraX,但是,我仍停留在配置其设置上。我想设置自动白平衡、降噪、闪光和对焦模式(就像在 Camera2 中一样)。到目前为止,我在 SO 上发现的唯一内容仅涉及 Camera2,官方文档也没有告诉我太多信息。是否可以在 CameraX 上设置这些模式,或者到目前为止仅支持 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
在三星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) 我正在开发一个应用程序,我试图在移动视觉API的帮助下扫描条形码.我TextureView在我的活动中创建,所以我需要相机在`TextureView上渲染.
我一直在使用旧的相机API,只是遇到了新的camera2 API.谁能帮助我,他们之间有什么区别?