在我的Android相机应用程序中,我正在使用Camera2 API.应用程序没有显示相机的预览,我已经以某种方式实现了它,当按下UI上的按钮时,它会拍摄图像.但问题在于自动对焦和自动曝光.简单地说,我需要将相机始终集中在视图的中间.因此,在构建请求时,我添加了以下属性:
captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
captureBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_AUTO);
captureBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
captureBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CameraMetadata.CONTROL_AE_PRECAPTURE_TRIGGER_START);
Run Code Online (Sandbox Code Playgroud)
但问题仍然是图像没有集中.
我有几个问题:
我是否需要在里面的方法中实现一些检查CameraCaptureSession.CaptureCallback?
我也注意到,在onImageAvailable调用的时候ImageReader.OnImageAvailableListener,没有触发onCaptureProgressed方法CameraCaptureSession.CaptureCallback.
我在这里缺少什么?我是否需要实现一个线程来等待相机聚焦,这将在按下拍照按钮时开始.
请注意,此应用程序没有相机预览.
I am working on Camera2 API to take pictures continuously and it's working fine, Here I am able to save the captured image using following code:
ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = null;
try {
// image = reader.acquireLatestImage();
image = reader.acquireNextImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
save(bytes);
} catch (FileNotFoundException e) {
logFile.writeCrashLog(TAG + ": " + e.toString());
hideProgressDialog();
} catch (IOException e) {
logFile.writeCrashLog(TAG …Run Code Online (Sandbox Code Playgroud) 我正在尝试直接使用Intent. 下面是我的代码——
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
intent.putExtra("android.intent.extras.CAMERA_FACING", android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT);
intent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1);
intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
}
Run Code Online (Sandbox Code Playgroud)
我的清单文件:--
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="some.package">
<uses-permission android:name="android.permission.INTERNET" />
<!--
The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
Google Maps Android API v2, but you must specify either coarse or fine
location permissions for the 'MyLocation' functionality.
-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" /> …Run Code Online (Sandbox Code Playgroud) 使用 Camera2 API 在 Android 中设置手动控件时, CaptureRequest.SENSOR_FRAME_DURATION的用途是什么?
\n\n我已经阅读了几次文档,但仍然无法\xe2\x80\x99理解其目的,以及相对于曝光时间和ISO设置什么值。
\n\n我了解 CaptureRequest.SENSOR_EXPOSURE_TIME 指定传感器允许进入的光量;另外,CaptureRequest.SENSOR_SENSITIVITY 是传感器对光的灵敏度 (ISO),但不知道 SENSOR_FRAME_DURATION 及其与曝光时间和传感器灵敏度的关系。
\n\n例如,如果我设置 1 秒或 30 秒的长曝光时间,那么我应该在 SENSOR_FRAME_DURATION 中设置什么值?它与其他传感器控制有何关系?
\n我在看 Android 的 Camera2 API。在代码https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java#L210,他们所使用的类SurfaceView,TextureView,Texture并且Surface没有过多解释。在区分这 4 个类时,文档也没有很大帮助。
因此,我的问题(S):什么是SurfaceView,TextureView,Texture和Texture?他们有什么区别?他们有什么区别?什么是用来做什么的?
每个非文档类的解释都会很棒。
提前致谢,
我正在进行扫描条形码的项目,所以我想禁用自动对焦以提高性能。我尝试了很多方法但根本不起作用。有人可以给我一些帮助吗?谢谢。
查看Camera2 API,似乎需要指定一个表面两次。一旦在 期间完成createCaptureSession,就传入表面列表。稍后,我们再次为预览构建器的addTarget方法指定相同的表面。如果我们稍后要指定目标表面,为什么我们需要在调用过程中最初指定表面列表createCaptureSession?对于没有作用的addTarget表面到底有什么作用?createCaptureSession问候。
我正在尝试使用新的 Camera2 API 访问相机设置并应用缩放。在旧的不推荐使用的 Camera API 中,代码如下:
Camera.Parameters parameters = mCamera.getParameters();
parameters.setZoom(zoomValue);
mCamera.setParameters(parameters);
Run Code Online (Sandbox Code Playgroud)
考虑到 CameraManager 用于打开相机,我们如何实现相同的功能?
CameraManager.openCamera(cameraId, stateCallback, backgroundHandler);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 CameraX Api 实现 TapToFocus 功能。我已经成功实现了它,但不知道如何在描述用户按下的位置的预览上画一个圆圈。