qt编写一段程序,实现导入图片,可以用滑动条对图片亮度和对比度进行调节
时间: 2023-11-27 17:49:02 浏览: 52
以下是一个简单的基于Qt的图片亮度和对比度调节程序示例:
```cpp
#include <QApplication>
#include <QMainWindow>
#include <QFileDialog>
#include <QSlider>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsPixmapItem>
#include <QImage>
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
this->setWindowTitle("Image Brightness and Contrast Adjustment");
// 创建滑动条和标签
brightnessSlider = new QSlider(Qt::Horizontal);
brightnessSlider->setRange(-100, 100);
brightnessSlider->setValue(0);
brightnessLabel = new QLabel(QString("Brightness: %1").arg(brightnessSlider->value()));
contrastSlider = new QSlider(Qt::Horizontal);
contrastSlider->setRange(-100, 100);
contrastSlider->setValue(0);
contrastLabel = new QLabel(QString("Contrast: %1").arg(contrastSlider->value()));
// 创建布局
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->addWidget(brightnessSlider);
vLayout->addWidget(brightnessLabel);
vLayout->addWidget(contrastSlider);
vLayout->addWidget(contrastLabel);
QHBoxLayout *hLayout = new QHBoxLayout();
hLayout->addLayout(vLayout);
// 创建图形视图和场景
QGraphicsScene *scene = new QGraphicsScene();
QGraphicsView *view = new QGraphicsView(scene);
hLayout->addWidget(view);
// 信号槽连接
connect(brightnessSlider, SIGNAL(valueChanged(int)), this, SLOT(onBrightnessChanged(int)));
connect(contrastSlider, SIGNAL(valueChanged(int)), this, SLOT(onContrastChanged(int)));
// 创建主窗口
QWidget *centralWidget = new QWidget();
centralWidget->setLayout(hLayout);
this->setCentralWidget(centralWidget);
// 加载默认图片
loadImage(":/images/default.png");
}
private slots:
void onBrightnessChanged(int value) {
brightnessLabel->setText(QString("Brightness: %1").arg(value));
adjustImage();
}
void onContrastChanged(int value) {
contrastLabel->setText(QString("Contrast: %1").arg(value));
adjustImage();
}
private:
QSlider *brightnessSlider;
QLabel *brightnessLabel;
QSlider *contrastSlider;
QLabel *contrastLabel;
QGraphicsPixmapItem *pixmapItem;
void loadImage(const QString &fileName) {
QImage image(fileName);
if (image.isNull()) {
return;
}
pixmapItem = new QGraphicsPixmapItem(QPixmap::fromImage(image));
QGraphicsScene *scene = pixmapItem->scene();
scene->clear();
scene->addItem(pixmapItem);
}
void adjustImage() {
if (!pixmapItem) {
return;
}
// 获取亮度和对比度值
int brightness = brightnessSlider->value();
int contrast = contrastSlider->value();
// 调整亮度和对比度
QPixmap pixmap = pixmapItem->pixmap();
QImage image = pixmap.toImage();
int width = image.width();
int height = image.height();
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
QRgb oldPixel = image.pixel(x, y);
int red = qRed(oldPixel) + brightness;
int green = qGreen(oldPixel) + brightness;
int blue = qBlue(oldPixel) + brightness;
red = qMin(qMax(red, 0), 255);
green = qMin(qMax(green, 0), 255);
blue = qMin(qMax(blue, 0), 255);
red = (contrast + 100) * (red - 128) / 100 + 128;
green = (contrast + 100) * (green - 128) / 100 + 128;
blue = (contrast + 100) * (blue - 128) / 100 + 128;
red = qMin(qMax(red, 0), 255);
green = qMin(qMax(green, 0), 255);
blue = qMin(qMax(blue, 0), 255);
image.setPixel(x, y, qRgb(red, green, blue));
}
}
pixmapItem->setPixmap(QPixmap::fromImage(image));
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
```
该程序创建了一个主窗口,包括一个用于调整亮度和对比度的滑动条和标签,以及一个用于显示图片的图形视图和场景。用户可以通过打开文件对话框来选择需要处理的图片,并通过滑动条调整亮度和对比度。在调整亮度和对比度时,程序将计算出新的像素值,并将其设置为图像的新像素值。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)