API камеры Android расплывчатое изображение на устройствах Samsung
После реализации API камеры2 для камеры inApp я заметил, что на устройствах Samsung изображения выглядят размытыми. После поиска об этом я нашел Sasmung Camera SDK ( http://developer.samsung.com/galaxy). Таким образом, после внедрения SDK на Samsung Galaxy S7 изображения теперь в порядке, но на Galaxy S6 они все еще размыты. Кто-то испытывал подобные проблемы с устройствами Samsung?
РЕДАКТИРОВАТЬ: В дополнение к комментарию @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.
2 ответа
Вы устанавливаете триггер автофокусировки на один кадр, но затем ждете завершения автофокусировки? Для AF_MODE_MACRO (вы проверяете поддержку списка устройств для этого режима AF?) вам нужно дождаться AF_STATE_FOCUSED_LOCKED , прежде чем изображение будет гарантированно стабильным и четким. (Вы также можете получить сообщение NOT_FOCUSED_LOCKED, если алгоритм автофокусировки не может достичь четкого фокуса, что может быть связано с тем, что объект находится слишком близко для объектива или сцена слишком запутана)
На большинстве современных устройств рекомендуется использовать CONTINUOUS_PICTURE и не беспокоиться о срабатывании автофокуса, если вы действительно не хотите заблокировать фокус на какой-то период времени. В этом режиме устройство будет постоянно пытаться сфокусироваться в меру своих возможностей. Я не уверен, что многие устройства поддерживают MACRO, для начала.
Может быть ряд проблем, вызывающих эту проблему. Одним из важных является размер вашего выходного изображения. Я запустил 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
Установка ширины и высоты вручную решила проблему.