diff options
Diffstat (limited to 'examples/multimedia/camera/imagesettings.py')
-rw-r--r-- | examples/multimedia/camera/imagesettings.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/examples/multimedia/camera/imagesettings.py b/examples/multimedia/camera/imagesettings.py new file mode 100644 index 000000000..9ca1d92ce --- /dev/null +++ b/examples/multimedia/camera/imagesettings.py @@ -0,0 +1,56 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +from PySide6.QtMultimedia import QImageCapture +from PySide6.QtWidgets import QDialog +from PySide6.QtCore import QSize + +from ui_imagesettings import Ui_ImageSettingsUi + + +def box_value(box): + idx = box.currentIndex() + return None if idx == -1 else box.itemData(idx) + + +def select_combo_box_item(box, value): + idx = box.findData(value) + if idx != -1: + box.setCurrentIndex(idx) + + +class ImageSettings(QDialog): + + def __init__(self, imageCapture, parent=None): + super().__init__(parent) + self.imagecapture = imageCapture + self._ui = Ui_ImageSettingsUi() + self._ui.setupUi(self) + + # image codecs + self._ui.imageCodecBox.addItem("Default image format", + QImageCapture.UnspecifiedFormat) + supported_image_formats = QImageCapture.supportedFormats() + for f in supported_image_formats: + description = QImageCapture.fileFormatDescription(f) + name = QImageCapture.fileFormatName(f) + self._ui.imageCodecBox.addItem(f"{name} : {description}", f) + + self._ui.imageQualitySlider.setRange(0, QImageCapture.VeryHighQuality.value) + + self._ui.imageResolutionBox.addItem("Default Resolution", QSize()) + camera = imageCapture.captureSession().camera() + supported_resolutions = camera.cameraDevice().photoResolutions() + for resolution in supported_resolutions: + w, h = resolution.width(), resolution.height() + self._ui.imageResolutionBox.addItem(f"{w}x{h}", resolution) + + select_combo_box_item(self._ui.imageCodecBox, imageCapture.fileFormat()) + select_combo_box_item(self._ui.imageResolutionBox, imageCapture.resolution()) + self._ui.imageQualitySlider.setValue(imageCapture.quality().value) + + def apply_image_settings(self): + self.imagecapture.setFileFormat(box_value(self._ui.imageCodecBox)) + q = self._ui.imageQualitySlider.value() + self.imagecapture.setQuality(QImageCapture.Quality(q)) + self.imagecapture.setResolution(box_value(self._ui.imageResolutionBox)) |