Как управлять вспышкой камеры на Android устройствах из Qt?
Ищется решение исключительно в стиле Qt. Если на данном этапе развития Qt это не возможно тогда, полагаю, решением может являться связка Qt Android Extras C++ + код управления камерой на Java. К сожалению в Java не силен чтобы реализовать этот вариант.
На Qt пробовал следующие варианты:
QML:
Torch {
power: 75 // 75% of full power
enabled: true // On
}
другой вариант
Camera {
flash.mode: Camera.FlashTorch
}
с++:
auto* camera = new QCamera(QCamera::BackFace);
QObject::connect(camera, &QCamera::stateChanged, [=](QCamera::State state){
qDebug() << "state:" << state;
if (state == QCamera::LoadedState) {
auto *exposure = camera->exposure();
qDebug() << "FlashTorch: " << exposure->isFlashModeSupported(QCameraExposure::FlashTorch);
qDebug() << "FlashOn: " << exposure->isFlashModeSupported(QCameraExposure::FlashOn);
if (exposure->isFlashModeSupported(QCameraExposure::FlashTorch)) {
exposure->setFlashMode(QCameraExposure::FlashTorch);
} else if (exposure->isFlashModeSupported(QCameraExposure::FlashOn)){
exposure->setFlashMode(QCameraExposure::FlashOn);
}
qDebug() << "flashMode:" << exposure->flashMode();
}
});
camera->load();
Оба варианта не работают. Получаю вывод на консоль:
FlashTorch: false
FlashOn: true
Но вспышка не включается.
AndroidManifest.xml:
Тестовый стенд:
Qt Creator 3.5.0 (opensource)
Qt 5.5.0 (GCC 4.9.1 20140922, 64 бита)
android 5.0.1
телефон Samsung GALAXY S4
Update 11.01.2016:
Еще одна попытка на QML. Пример взят отсюда Camera QML Type
Item {
width: 640
height: 360
Camera {
id: camera
position: Camera.BackFace
captureMode: Camera.CaptureVideo
imageProcessing.whiteBalanceMode: CameraImageProcessing.WhiteBalanceFlash
exposure {
exposureCompensation: -1.0
exposureMode: Camera.ExposurePortrait
}
flash.mode: Camera.FlashOn
imageCapture {
onImageCaptured: {
photoPreview.source = preview // Show the preview in an Image
}
}
}
VideoOutput {
source: camera
anchors.fill: parent
focus : visible // to receive focus and capture key events when visible
}
Image {
id: photoPreview
}
}
Button {
text: "Start"
onClicked: {
camera.start()
}
}
Ответ
Вспышка поддерживается только в режиме видео захвата.
Комментариев нет:
Отправить комментарий