カメラの例
静止画撮影または動画撮影の方法を示します。
カメラの例 Qt Multimediaを使用して、基本的なCamera機能を実装し、静止画像を撮影したり、音声付きのビデオクリップを録画したりする方法を示します。
例の実行
からサンプルを実行するには Qt Creatorからサンプルを実行するには、Welcome モードを開き、Examples からサンプルを選択します。詳細については、Building and Running an Exampleを参照してください。
この例では、カメラ・インターフェースとして動作するCamera
クラスを実装しています。このクラスには、ユーザー・インターフェース、制御関数、設定値、画像やビデオ・クリップを保存する場所を定義する手段があります。また、画像やビデオの設定も保存されます。
Cameraクラスは
- ハードウェアへのAPIクラス・インターフェースであるQCamera のインスタンス。
- 静止画を撮影するQImageCapture のインスタンス。
- QMediaRecorder のインスタンス。また、ユーザー・インターフェース・オブジェクトも含まれます。
カメラのコンストラクタ
Cameraコンストラクタは、デフォルトですべてのボタンを無効にするなど、ユーザーインターフェースの基本的な初期化を行います。
Camera::Camera() : ui(new Ui::Camera) { ui->setupUi(this); // disable all buttons by default updateCameraActive(false); readyForCapture(false); ui->recordButton->setEnabled(false); ui->pauseButton->setEnabled(false); ui->stopButton->setEnabled(false); ui->metaDataButton->setEnabled(false);
また、入力デバイスへのアクセス許可を求めます:
#if QT_CONFIG(permissions) // カメラ QCameraPermissioncameraPermission;switch(qApp->checkPermission(cameraPermission)) {caseQt::PermissionStatus::Undetermined: qApp->requestPermission(cameraPermission, this, &Camera::init); return;caseQt::PermissionStatus::Denied: qWarning("Camera permission is not granted!"); return;caseQt::PermissionStatus::Granted:break; }// マイク QMicrophonePermissionmicrophonePermission;switch(qApp->checkPermission(microphonePermission)) {caseQt::PermissionStatus::Undetermined: qApp->requestPermission(microphonePermission, this, &Camera::init); return;caseQt::PermissionStatus::Denied: qWarning("Microphone permission is not granted!"); return;caseQt::PermissionStatus::Granted:break; }#endif
入力が割り当てられる:
m_audioInput.reset(new QAudioInput); m_captureSession.setAudioInput(m_audioInput.get()); // Camera devices: videoDevicesGroup = new QActionGroup(this); videoDevicesGroup->setExclusive(true); updateCameras();
UIシグナルは、トリガー・イベントに反応するスロットに接続される:
connect(&m_devices, &QMediaDevices::videoInputsChanged, this, &Camera::updateCameras); connect(videoDevicesGroup, &QActionGroup::triggered, this, &Camera::updateCameraDevice); connect(ui->captureWidget, &QTabWidget::currentChanged, this, &Camera::updateCaptureMode); connect(ui->metaDataButton, &QPushButton::clicked, this, &Camera::showMetaDataDialog); connect(ui->exposureCompensation, &QAbstractSlider::valueChanged, this, &Camera::setExposureCompensation); setCamera(QMediaDevices::defaultVideoInput());
しかし、ほとんどの作業はsetCamera()関数が呼ばれたときに行われ、QCameraDevice 。
setCamera()
setCamera()
は、シグナルとスロットを使用して、ユーザー・インターフェースとCameraクラスの機能の間のさまざまな接続を設定します。また、 、 、 オブジェクトのインスタンス化と初期化も行われる。QCamera QImageCapture QMediaRecorder
void Camera::setCamera(const QCameraDevice &cameraDevice) { m_camera.reset(new QCamera(cameraDevice)); m_captureSession.setCamera(m_camera.data()); connect(m_camera.data(), &QCamera::activeChanged, this, &Camera::updateCameraActive); connect(m_camera.data(), &QCamera::errorOccurred, this, &Camera::displayCameraError); if (!m_mediaRecorder) { m_mediaRecorder.reset(new QMediaRecorder); m_captureSession.setRecorder(m_mediaRecorder.data()); connect(m_mediaRecorder.data(), &QMediaRecorder::recorderStateChanged, this, &Camera::updateRecorderState); connect(m_mediaRecorder.data(), &QMediaRecorder::durationChanged, this, &Camera::updateRecordTime); connect(m_mediaRecorder.data(), &QMediaRecorder::errorChanged, this, &Camera::displayRecorderError); } if (!m_imageCapture) { m_imageCapture.reset(new QImageCapture); m_captureSession.setImageCapture(m_imageCapture.get()); connect(m_imageCapture.get(), &QImageCapture::readyForCaptureChanged, this, &Camera::readyForCapture); connect(m_imageCapture.get(), &QImageCapture::imageCaptured, this, &Camera::processCapturedImage); connect(m_imageCapture.get(), &QImageCapture::imageSaved, this, &Camera::imageSaved); connect(m_imageCapture.get(), &QImageCapture::errorOccurred, this, &Camera::displayCaptureError); }
静止画および動画撮影のビジュアル・タブが有効になります:
m_captureSession.setVideoOutput(ui->viewfinder); updateCameraActive(m_camera->isActive()); updateRecorderState(m_mediaRecorder->recorderState()); readyForCapture(m_imageCapture->isReadyForCapture()); updateCaptureMode();
最後に、QCamera オブジェクトのstart() 関数が呼び出されます。
m_camera->start();
キャプチャのトリガー
これでカメラはユーザのコマンドに対応できるようになり、適切なイベントを待ちます。このようなイベントは、アプリケーション・ウィンドウのQt::Key_CameraFocus またはQt::Key_Camera ボタンを押すことで発生します。
Key_CameraFocusは単にプレビューを表示し、カメラ設定をロックします。
} void Camera::keyPressEvent(QKeyEvent *event) { if (event->isAutoRepeat()) return; switch (event->key()) { case Qt::Key_CameraFocus: displayViewfinder(); event->accept(); break;
Key_Camera
は、画像キャプチャを行う場合はtakeImage()を呼び出すか、ビデオを録画する場合は インスタンスで または (すでに録画している場合)を呼び出します。QMediaRecorder record()
stop()
case Qt::Key_Camera: if (m_doImageCapture) { takeImage(); } else { if (m_mediaRecorder->recorderState() == QMediaRecorder::RecordingState) stop(); else record(); } event->accept(); break;
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.