// 配置图像设置 void Camera::configureImageSettings() { // 创建图像设置对话框 ImageSettings settingsDialog(imageCapture);

// 设置图像设置
settingsDialog.setImageSettings(imageSettings);

// 如果对话框执行成功,则更新图像设置并设置编码设置
if (settingsDialog.exec()) {
    imageSettings = settingsDialog.imageSettings();
    imageCapture->setEncodingSettings(imageSettings);
}

}

// 开始录制 void Camera::record() { mediaRecorder->record(); updateRecordTime(); }

// 暂停录制 void Camera::pause() { mediaRecorder->pause(); }

// 停止录制 void Camera::stop() { mediaRecorder->stop(); }

// 设置是否静音 void Camera::setMuted(bool muted) { mediaRecorder->setMuted(muted); }

// 切换锁 void Camera::toggleLock() { // 根据相机的锁定状态执行不同的操作 switch (camera->lockStatus()) { case QCamera::Searching: case QCamera::Locked: camera->unlock(); break; case QCamera::Unlocked: camera->searchAndLock(); } }

// 更新锁定状态 void Camera::updateLockStatus(QCamera::LockStatus status, QCamera::LockChangeReason reason) { // 根据相机的锁定状态更新按钮的文本和颜色 QColor indicationColor = Qt::black;

switch (status) {
case QCamera::Searching:
    indicationColor = Qt::yellow;
    ui->statusbar->showMessage(tr("Focusing..."));
    ui->lockButton->setText(tr("Focusing..."));
    break;
case QCamera::Locked:
    indicationColor = Qt::darkGreen;
    ui->lockButton->setText(tr("Unlock"));
    ui->statusbar->showMessage(tr("Focused"), 2000);
    break;
case QCamera::Unlocked:
    indicationColor = reason == QCamera::LockFailed ? Qt::red : Qt::black;
    ui->lockButton->setText(tr("Focus"));
    if (reason == QCamera::LockFailed)
        ui->statusbar->showMessage(tr("Focus Failed"), 2000);
}

QPalette palette = ui->lockButton->palette();
palette.setColor(QPalette::ButtonText, indicationColor);
ui->lockButton->setPalette(palette);

}

// 拍照 void Camera::takeImage() { isCapturingImage = true; imageCapture->capture(); }

// 显示拍摄错误信息 void Camera::displayCaptureError(int id, const QCameraImageCapture::Error error, const QString &errorString) { Q_UNUSED(id); Q_UNUSED(error); QMessageBox::warning(this, tr("Image Capture Error"), errorString); isCapturingImage = false; }

// 启动相机 void Camera::startCamera() { camera->start(); }

// 停止相机 void Camera::stopCamera() { camera->stop(); }

// 更新捕获模式 void Camera::updateCaptureMode() { // 根据当前选项卡的索引设置捕获模式 int tabIndex = ui->captureWidget->currentIndex(); QCamera::CaptureModes captureMode = tabIndex == 0 ? QCamera::CaptureStillImage : QCamera::CaptureVideo;

if (camera->isCaptureModeSupported(captureMode))
    camera->setCaptureMode(captureMode);

}

// 更新相机状态 void Camera::updateCameraState(QCamera::State state) { // 根据相机的状态更新界面控件的可用状态 switch (state) { case QCamera::ActiveState: ui->actionStartCamera->setEnabled(false); ui->actionStopCamera->setEnabled(true); ui->captureWidget->setEnabled(true); ui->actionSettings->setEnabled(true); break; case QCamera::UnloadedState: case QCamera::LoadedState: ui->actionStartCamera->setEnabled(true); ui->actionStopCamera->setEnabled(false); ui->captureWidget->setEnabled(false); ui->actionSettings->setEnabled(false); } }

// 更新录制状态 void Camera::updateRecorderState(QMediaRecorder::State state) { // 根据录制状态更新界面控件的可用状态 switch (state) { case QMediaRecorder::StoppedState: ui->recordButton->setEnabled(true); ui->pauseButton->setEnabled(true); ui->stopButton->setEnabled(false); break; case QMediaRecorder::PausedState: ui->recordButton->setEnabled(true); ui->pauseButton->setEnabled(false); ui->stopButton->setEnabled(true); break; case QMediaRecorder::RecordingState: ui->recordButton->setEnabled(false); ui->pauseButton->setEnabled(true); ui->stopButton->setEnabled(true); break; } }

// 设置曝光补偿值 void Camera::setExposureCompensation(int index) { camera->exposure()->setExposureCompensation(index*0.5); }

// 显示录制错误信息 void Camera::displayRecorderError() { QMessageBox::warning(this, tr("Capture error"), mediaRecorder->errorString()); }

// 显示相机错误信息 void Camera::displayCameraError() { QMessageBox::warning(this, tr("Camera error"), camera->errorString()); }

// 更新相机设备 void Camera::updateCameraDevice(QAction *action) { setCamera(qvariant_cast(action->data())); }

// 显示取景器 void Camera::displayViewfinder() { ui->stackedWidget->setCurrentIndex(0); }

// 显示拍摄的图像 void Camera::displayCapturedImage() { ui->stackedWidget->setCurrentIndex(1); }

// 准备好拍摄 void Camera::readyForCapture(bool ready) { ui->takeImageButton->setEnabled(ready); }

// 图像保存成功 void Camera::imageSaved(int id, const QString &fileName) { Q_UNUSED(id); Q_UNUSED(fileName);

isCapturingImage = false;
if (applicationExiting)
    close();

}

// 关闭事件 void Camera::closeEvent(QCloseEvent *event) { if (isCapturingImage) { setEnabled(false); applicationExiting = true; event->ignore(); } else { event->accept(); }

Qt相机应用 - 相机功能代码详解

原文地址: https://www.cveoy.top/t/topic/oQ6r 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录