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

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

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


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;i<height;i++)
    {
           for(int j=0;j<width;j++)
           {
                *(pData+(i*width+j)*4)=0;
                *(pData+(i*width+j)*4+1)=0;
                *(pData+(i*width+j)*4+2)=0;
           }
    }
    QPixmap ConvertPixmap=QPixmap::fromImage(image);
    //memset(pData,width*height*4,0);
    ui->label_2->setPixmap(ConvertPixmap);

}

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


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

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<height;i++)
    {
           for(int j=0;j<width;j++)
           {
                *(pData+(i*width+j)*4)=(*(pData+(i*width+j)*4)*value/255);        //B变换
                *(pData+(i*width+j)*4+1)=(*(pData+(i*width+j)*4+1)*value/255);    //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 <QMainWindow>

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 <QImage>
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;i<height;i++)
    {
           for(int j=0;j<width;j++)
           {
                *(pData+(i*width+j)*4)=0;      //B
                *(pData+(i*width+j)*4+1)=0;    //G
                *(pData+(i*width+j)*4+2)=0;    //R
           }
    }
    QPixmap ConvertPixmap=QPixmap::fromImage(image);
    //memset(pData,width*height*4,0);  //memset函数,把pData字符串把width*height*4长度内容全部清空 ,方法等同上面两个for循环
    ui->label_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;i<height;i++)
    {
           for(int j=0;j<width;j++)
           {
                *(pData+(i*width+j)*4)=(*(pData+(i*width+j)*4)*value/255);
                *(pData+(i*width+j)*4+1)=(*(pData+(i*width+j)*4+1)*value/255);
                *(pData+(i*width+j)*4+2)=(*(pData+(i*width+j)*4+2)*value/255);
           }
    }
    QPixmap ConvertPixmap=QPixmap::fromImage(image);
    //memset(pData,width*height*4,0);
    ui->label_2->setPixmap(ConvertPixmap);
}

  • 16
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑电信号要分类

你的鼓励是我创作的前进动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值