在为inApp摄像头实现camera2 API后,我注意到在三星设备上,图像看起来很模糊。经过搜索,我找到了Sasmug相机SDK(http://developer.samsung.com/galaxy#camera)。因此,在三星Galaxy S7上实现SDK后,图像现在很好,但在Galaxy S6上仍然模糊。有人在三星设备上遇到过这种问题吗?
编辑:补充@rcsumners的评论。我正在使用设置自动对焦
mPreviewBuilder.set(SCaptureRequest.CONTROL_AF_TRIGGER, SCaptureRequest.CONTROL_AF_TRIGGER_START);
mSCameraSession.capture(mPreviewBuilder.build(), new SCameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) {
isAFTriggered = true;
}
}, mBackgroundHandler);
这是一种长曝光图像,用户必须拍摄静止不动物体的图像。为此,我使用CONTROL_AF_MODE_MACRO
mCaptureBuilder.set(SCaptureRequest.CONTROL_AF_MODE, SCaptureRequest.CONTROL_AF_MODE_MACRO);
如果可用,我也会启用自动闪光
requestBuilder.set(SCaptureRequest.CONTROL_AE_MODE,
SCaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
我不是API方面的专家,我主要使用SDK示例应用程序。
可能有许多问题导致了此问题。一个突出的问题是输出图像的尺寸我运行了Camera2 API,预览很清楚,但输出很模糊
val characteristics: CameraCharacteristics? = cameraManager.getCameraCharacteristics(cameraId)
val size = characteristics?.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)?.getOutputSizes(ImageFormat.JPEG) // The issue
val width = imageDimension.width
val height = imageDimension.height
if (size != null) {
width = size[0].width; height = size[0].height
}
val imageReader = ImageReader.newInstance(width, height, ImageFormat.JPEG, 5)
下面的代码返回的尺寸约为245*144,太小了,无法发送到图像读取器。一些输出是如何拉伸图像使其最终变得模糊的。因此,我删除了下面的这一行。
val size = characteristics?.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)?.getOutputSizes(ImageFormat.JPEG) // this was returning a small
手动设置宽度和高度解决了此问题。
您正在为一帧设置AF触发器,但您正在等待AF完成吗?对于AF_MODE_MRO(您是否正在验证设备列表是否支持此AF模式?),您需要等待AF_STATE_FOCUSED_LOCKED,然后才能保证图像稳定清晰。(如果AF算法无法达到清晰的焦点,可能是因为物体离镜头太近,或者场景太混乱,您也可能收到NOT_FOCUSED_LOCKED)
在大多数现代设备上,建议使用CONTINUOUS_PICTURE,不要担心AF触发,除非你真的想锁定焦点一段时间。在该模式下,设备将不断尝试尽其所能进行聚焦。首先,我不确定所有的设备都支持MACRO。