qt编写一段程序,实现导入图片,可以用按钮对图片对比度进行调节
时间: 2024-01-21 09:16:23 浏览: 33
以下是一个简单的Qt程序,可以实现导入图片并通过滑块调节对比度:
```cpp
#include <QtWidgets>
class ContrastWidget : public QWidget
{
public:
ContrastWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
// 创建布局
QVBoxLayout *layout = new QVBoxLayout(this);
// 创建打开图片按钮
QPushButton *openButton = new QPushButton(tr("打开图片"), this);
layout->addWidget(openButton);
connect(openButton, &QPushButton::clicked, this, &ContrastWidget::openImage);
// 创建调节对比度的滑块
QSlider *contrastSlider = new QSlider(Qt::Horizontal, this);
contrastSlider->setRange(-100, 100);
layout->addWidget(contrastSlider);
connect(contrastSlider, &QSlider::valueChanged, this, &ContrastWidget::setContrast);
// 创建显示图片的标签
m_imageLabel = new QLabel(this);
m_imageLabel->setAlignment(Qt::AlignCenter);
layout->addWidget(m_imageLabel);
// 设置窗口大小
setFixedSize(400, 400);
}
void openImage()
{
// 打开图片文件
QString fileName = QFileDialog::getOpenFileName(this, tr("打开图片"), "", tr("Images (*.png *.jpg *.bmp)"));
if (fileName.isEmpty())
return;
// 加载图片
QPixmap pixmap(fileName);
m_originalImage = pixmap.toImage();
m_imageLabel->setPixmap(pixmap);
}
void setContrast(int value)
{
// 计算对比度调整参数
qreal factor = (259.0 * (value + 255.0)) / (255.0 * (259.0 - value));
qreal bias = 128.0 * (1.0 - factor);
// 创建调整后的图像
QImage adjustedImage = m_originalImage;
for (int y = 0; y < adjustedImage.height(); y++) {
for (int x = 0; x < adjustedImage.width(); x++) {
QColor color = adjustedImage.pixelColor(x, y);
int red = qBound(0, qRound(factor * color.red() + bias), 255);
int green = qBound(0, qRound(factor * color.green() + bias), 255);
int blue = qBound(0, qRound(factor * color.blue() + bias), 255);
adjustedImage.setPixelColor(x, y, QColor(red, green, blue));
}
}
// 显示调整后的图像
m_imageLabel->setPixmap(QPixmap::fromImage(adjustedImage));
}
private:
QLabel *m_imageLabel;
QImage m_originalImage;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
ContrastWidget widget;
widget.show();
return app.exec();
}
```
这个程序中,我们创建了一个ContrastWidget类,继承自QWidget,包含一个打开图片的按钮、一个调节对比度的滑块和一个用于显示图像的标签。在打开图片按钮被按下时,我们使用QFileDialog打开图片文件,并将其加载到QLabel中显示。在滑块值发生变化时,我们计算出对比度调整参数,然后遍历图像的每个像素,根据调整参数计算出新的像素值,并将其设置到QImage中。最后,我们将调整后的图像显示到QLabel中。
需要注意的是,这个程序只是演示了如何调节图像对比度,实际应用中还需要考虑很多其他因素,如图像的亮度、饱和度等。