// 构造函数,传入一个QCameraImageCapture对象和QWidget对象作为父窗口 ImageSettings::ImageSettings(QCameraImageCapture *imageCapture, QWidget *parent) : QDialog(parent), ui(new Ui::ImageSettingsUi), imagecapture(imageCapture) { ui->setupUi(this);

// 设置下拉框中的图片编解码器
ui->imageCodecBox->addItem(tr('Default image format'), QVariant(QString()));
foreach(const QString &codecName, imagecapture->supportedImageCodecs()) {
    QString description = imagecapture->imageCodecDescription(codecName);
    ui->imageCodecBox->addItem(codecName + ': ' + description, QVariant(codecName));
}

// 设置下拉框中的图片质量滑块范围
ui->imageQualitySlider->setRange(0, int(QMultimedia::VeryHighQuality));

// 设置下拉框中的图片分辨率
ui->imageResolutionBox->addItem(tr('Default Resolution'));
QList<QSize> supportedResolutions = imagecapture->supportedResolutions();
foreach(const QSize &resolution, supportedResolutions) {
    ui->imageResolutionBox->addItem(QString('%1x%2').arg(resolution.width()).arg(resolution.height()),
                                    QVariant(resolution));
}

}

// 析构函数 ImageSettings::~ImageSettings() { delete ui; }

// 重载changeEvent函数,处理语言切换事件 void ImageSettings::changeEvent(QEvent *e) { QDialog::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } }

// 获取图片编码设置 QImageEncoderSettings ImageSettings::imageSettings() const { QImageEncoderSettings settings = imagecapture->encodingSettings(); settings.setCodec(boxValue(ui->imageCodecBox).toString()); settings.setQuality(QMultimedia::EncodingQuality(ui->imageQualitySlider->value())); settings.setResolution(boxValue(ui->imageResolutionBox).toSize());

return settings;

}

// 设置图片编码设置 void ImageSettings::setImageSettings(const QImageEncoderSettings &imageSettings) { selectComboBoxItem(ui->imageCodecBox, QVariant(imageSettings.codec()));
selectComboBoxItem(ui->imageResolutionBox, QVariant(imageSettings.resolution()));
ui->imageQualitySlider->setValue(imageSettings.quality()); }

// 获取下拉框选项 QVariant ImageSettings::boxValue(const QComboBox *box) const { int idx = box->currentIndex(); if (idx == -1) return QVariant();

return box->itemData(idx);

}

// 设置下拉框选项 void ImageSettings::selectComboBoxItem(QComboBox *box, const QVariant &value)
{ for (int i = 0; i < box->count(); ++i) { if (box->itemData(i) == value) { box->setCurrentIndex(i); break; } } }

C++ Qt 摄像头图片设置类代码详解

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

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