Articles of android camera2

Android Camera2增加亮度

我在我的应用程序中使用android camera2来拍摄连续图像,这时我使用camera2获得的图像预览亮度与原始相机相比非常暗。 我看到了这个,但答案中没有类似的要求。 我按照这里的建议尝试在camera2中设置亮度: 请注意,此控件仅在android.control.aeMode!= OFF时有效。 即使android.control.aeLock == true,此控件也将生效。 captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON); captureRequestBuilder.set(CaptureRequest.CONTROL_AE_LOCK, true); captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 6); 但它仍然显示预览为暗图像,如下所示。 看到这里的区别: 原装相机: 使用Camera2: 我需要传递的值是什么,作为第二个参数: captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 6); 我保持6,因为正如doc的建议: 例如,如果曝光值(EV)步长为0.333,则“6”表示+2 EV的曝光补偿; -3意味着-1 EV的曝光补偿。 但亮度仍然没有影响..

Android – 录制video时在前后摄像头之间切换

我正在尝试实现自定义相机来录制video。 我已经关注了这个样本 ,它运行正常。 现在,我想通过按钮点击添加“切换摄像头”function。 即使在录制video时,它也应该能够在前/后摄像头之间切换 。 因此,请帮助我知道它是否可能? 1.如果是,那么如何? 如果没有那么请建议一些解决方法? 一些示例代码或链接将非常有用…… 注意:我一直在谷歌上搜索,发现一些StackOverFlow的答案就像 Android Camera2 API切换后置摄像头 Android:单击按钮时切换相机 但是, 当录制video时 ,这些都没有提供切换摄像机的function 。 请帮忙。 代码与此示例相同。 这是Camera2 API 。

Nexus 5x反向横向传感器修复在Android相机预览应用程序中

我是Android开发中的新手,所以如果我的问题很简单,我会提前道歉。 在我的应用程序的一部分中,我需要我的后置摄像头的实时预览,所以我创建了一个自定义类,它扩展了SurfaceView并实现了SurfaceHolder.Callback(我基本遵循了android文档中的说明)。 不幸的是,我在Nexus 5x中测试我的应用程序,我刚刚意识到它已经以相反的方式安装了相机传感器。 出于这个原因,在我的Nexus 5x上运行时,我的应用程序的相机预览显示颠倒,这是我不想要的。 似乎新的android.hardware.camera2 API能够自动处理这个问题。 最终我需要使用这个新API更新我的所有代码,但是现在我需要的是使用旧相机API时的快速修复。 所以我在那里阅读,我发现了一段代码,我需要在SurfaceChanged方法中引入以解决这个问题。 这里是: Display display = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); if(display.getRotation() == Surface.ROTATION_0) { parameters.setPreviewSize(capHeight, capWidth); camera.setDisplayOrientation(90); } if(display.getRotation() == Surface.ROTATION_90) { parameters.setPreviewSize(capWidth, capHeight); } if(display.getRotation() == Surface.ROTATION_180) { parameters.setPreviewSize(capHeight, capWidth); } if(display.getRotation() == Surface.ROTATION_270) { parameters.setPreviewSize(capWidth, capHeight); camera.setDisplayOrientation(180); } camera.setParameters(parameters);*/ camera.startPreview(); 问题是我没有看到某些事情发生了变化。 有什么想法吗?

如何从色彩校正增益中获得色温

我试图找出相机拍摄的照片的色温。 final CameraCaptureSession.CaptureCallback previewSSession = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) { super.onCaptureStarted(session, request, timestamp, frameNumber); } @Override public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, TotalCaptureResult result) { super.onCaptureCompleted(session, request, result); RggbChannelVector rggbChannelVector = result.get(CaptureResult.COLOR_CORRECTION_GAINS); getColorTemperature(rggbChannelVector); startCamera(); } }; private void getColorTemperature(RggbChannelVector rggbChannelVector) { […]

ActivityCompat和ContextCompat之间有什么区别?

我正在尝试使用Android相机,对于API 23或更高版本,它需要在运行时请求权限。 根据文档 ,我可以使用ActivityCompat或ContextCompat来实现。 我不明白这两者之间有什么区别和他们的权衡取舍。 谢谢你的时间。

预览在camera2 apis中延伸

以下是在camera2 apis中使用纹理视图时的屏幕截图。在全屏幕中,预览会拉伸,但在使用较低分辨率(第二张图像)时可以使用。 如何在不拉伸的情况下全屏使用此预览。

使用Android Camera2 API进行人脸检测和绘制圆圈

目前我正在尝试将Camera2.Face转换为实际视图的rect,以便在Camera2 API检测到的脸部上绘制圆圈。 我可以通过以下代码获取面数及其数据到Callback: private CameraCaptureSession.CaptureCallback mCaptureCallback = new CameraCaptureSession.CaptureCallback() { private void process(CaptureResult result) { Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE); Face [] faces = result.get(CaptureResult.STATISTICS_FACES); if(faces != null && mode != null) Log.e(“tag”, “faces : ” + faces.length + ” , mode : ” + mode ); } @Override public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request, CaptureResult […]

访问被拒绝查找属性“camera.hal1.packagelist”

在服务中使用相机时,移动屏幕变得不可触摸(由透明窗口锁定)并且仅在出现错误之下 Access denied finding property “camera.hal1.packagelist” 将是什么原因及其解决方案? 请帮忙..

Camera2basic应用程序,在Android 6.0 LGG3中有非常黑暗的预览

新的API,也许只在LG G3上,似乎有些变化。 我正在使用示例代码 。 在我的nexus 4上,代码运行完美,但在LGG3上更新到Android 6.0却没有。 有任何想法吗? 我玩了设置,但没有运气,这仍然适用于Nexus 4: mPreviewRequestBuilder.set(CaptureRequest.BLACK_LEVEL_LOCK, false); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_LOCK, false); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_AUTO); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_LOCK, false); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_ANTIBANDING_MODE, CaptureRequest.CONTROL_AE_ANTIBANDING_MODE_AUTO); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 0); //mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, Range.create(1000,1000)); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, 0); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO); mPreviewRequestBuilder.set(CaptureRequest.COLOR_CORRECTION_MODE, CaptureRequest.CONTROL_MODE_AUTO); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);

YUV_420_888解读三星Galaxy S7(Camera2)

我写了一个从YUV_420_888到Bitmap的转换,考虑到以下逻辑(据我所知): 总结该方法:内核的坐标x和y与Y平面(2d分配)的非填充部分的x和y以及输出Bitmap的x和y都是一致的。 然而,U平面和V平面具有与Y平面不同的结构,因为它们使用1个字节覆盖4个像素,此外,可能具有多于一个的PixelStride,此外它们可能也有一个可以与Y平面不同的填充。 因此,为了通过内核有效地访问U和V,我将它们放入1-d分配并创建索引“uvIndex”,该索引给出了在给定的1-d分配中相应的U-和V的位置( (非填充)Y平面中的x,y)坐标(以及输出位图)。 为了保持rs-Kernel的精简,我通过LaunchOptions限制x范围来排除yPlane中的填充区域(这反映了y平面的RowStride,因此可以在内核中忽略)。 所以我们只需要考虑uvIndex中的uvPixelStride和uvRowStride,即用于访问u值和v值的索引。 这是我的代码: Renderscript内核,名为yuv420888.rs #pragma version(1) #pragma rs java_package_name(com.xxxyyy.testcamera2); #pragma rs_fp_relaxed int32_t width; int32_t height; uint picWidth, uvPixelStride, uvRowStride ; rs_allocation ypsIn,uIn,vIn; // The LaunchOptions ensure that the Kernel does not enter the padding zone of Y, so yRowStride can be ignored WITHIN the Kernel. uchar4 __attribute__((kernel)) doConvert(uint32_t x, uint32_t […]