制作一个基于QT的简单图像处理

对于刚接触QT的我来说,其实很陌生,一开始就来输入输出都搞不懂,当明白了qt的原理后,就发现其实qt做起界面来还是挺方面,容易操作的,一下是一次简单的实验,可以改进的地方还是有多,我写的只是一个很基础的操作像素的实验。

1.首先搭建起一个简单的图形界面

制作一个基于QT的简单图像处理_第1张图片
制作一个基于QT的简单图像处理_第2张图片

2.对两个按钮添加槽函数,一个是正常显示图片,另一个是把图片涂黑,再展现出来,代码如下

void MainWindow::on_pushButton_clicked()
{
    //ui->label->setPixmap(QPixmap("1.png"));

    pPixmap=new QPixmap("1.png");
    ui->label->setPixmap(*pPixmap);
    ui->pushButton->setDisabled(true);

}

void MainWindow::on_pushButton_2_clicked()
{

    QImage  image=pPixmap->toImage();
    unsigned char *pData=image.bits();

    int width=image.width();
    int height=image.height();

    for(int i=0;ilabel_2->setPixmap(ConvertPixmap);

}

3.使用了slider滑条来控制图片像素的变化

制作一个基于QT的简单图像处理_第3张图片

拖动滑条,可以看到图片从全黑到原图的一个变化过程,代码如下:

void MainWindow::on_horizontalSlider_valueChanged(int value)
{
    QImage  image=pPixmap->toImage();
    unsigned char *pData=image.bits();       //找到图片指针的首地址

    int width=image.width();
    int height=image.height();

    for(int i=0;i//G变换
                *(pData+(i*width+j)*4+2)=(*(pData+(i*width+j)*4+2)*value/255);    //R变换
           }
    }
    QPixmap ConvertPixmap=QPixmap::fromImage(image);  //把像素转换回QPixmap格式
    //memset(pData,width*height*4,0);
    ui->label_2->setPixmap(ConvertPixmap); 
}


4.以下是整个工程的代码

(1)mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_horizontalSlider_valueChanged(int value);

private:
    Ui::MainWindow *ui;
    QPixmap *pPixmap;
};

#endif // MAINWINDOW_H

(2)mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->horizontalSlider->setRange(0,255); //设置slider的范围在0~255
    ui->label->setText(" ");        //清空label内容
    ui->label_2->setText(" ");        //清空labe_2内容

}

MainWindow::~MainWindow()
{

    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    //ui->label->setPixmap(QPixmap("1.png"));  //导入图片

    pPixmap=new QPixmap("1.png");        //new一个对象实例化,导入图片, pPixmap在mainwindow.h 中定义了 QPixmap *pPixmap;
    ui->label->setPixmap(*pPixmap);        //在label中显示图片
    ui->pushButton->setDisabled(true);    //禁用pushButton

}

void MainWindow::on_pushButton_2_clicked()
{

    QImage  image=pPixmap->toImage();
    unsigned char *pData=image.bits();

    int width=image.width();
    int height=image.height();

    for(int i=0;ilabel_2->setPixmap(ConvertPixmap);

}

void MainWindow::on_horizontalSlider_valueChanged(int value)
{
    QImage  image=pPixmap->toImage();
    unsigned char *pData=image.bits();

    int width=image.width();
    int height=image.height();

    for(int i=0;ilabel_2->setPixmap(ConvertPixmap);
}

你可能感兴趣的:(制作一个基于QT的简单图像处理)