Qt之QImage

1.概述

Qt提供了QImage、QPixmap、QBitmap和QPicture四种处理图像数据的类。本文本只着重讲解QImage类的使用。QImage提供了一个与硬件无关的图像表示方法,允许直接访问像素数据,可用作绘图设备。提供了很多可以用于获取图像信息和进行图像变换的函数。主要功能如下:
(1)图像加载。对png、jpg、ico格式图像的加载;
(2)图像变换。图像放大、缩小、旋转、镜像等操作;
(3)像素颜色修改。图像黑白化(本文只介绍这一种,其他色彩变化同理);
(4)图像另存。另存为png、jpg、ico格式图像。
功能展示:
在这里插入图片描述
新建ImageDlg类,头文件内容如下。

#include <QWidget>
#include <QImage>
#include <QFileDialog>

namespace Ui {
class ImageDlg;
}

class ImageDlg : public QWidget
{
    Q_OBJECT

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


private slots:
    //放大
    void onZoomIn();
    //缩小
    void onZoomOut();
    //顺时针旋转
    void onRotateS();
    //逆时针旋转
    void onRotateN();
    //横向镜像
    void onVerMirror();
    //纵向镜像
    void onHorMirror();
    //灰度
    void onGray();
    //灰度1
    void onGray1(int grayR=127,int grayG = 127,int grayB = 127);
    //另存为
    void onSave();
private:
    Ui::ImageDlg *ui;

    QImage m_img;
};

2.图像加载

    ui->label->setScaledContents(true);
    if(m_img.load("../SRC/banna/1.jpg"))
    {
        ui->label->setPixmap(QPixmap::fromImage(m_img));
    }

3.图像变换

3.1放大

    if(m_img.isNull())
        return;

    //声明一个QMatrix类的实例,并按照2倍比例对水平和垂直方向进行放大,当前图形按照该坐标矩阵进行转换
    QMatrix martix;
    martix.scale(2,2);
    m_img = m_img.transformed(martix);
    //重新设置显示图形
    ui->label->setPixmap(QPixmap::fromImage(m_img));

3.2缩小

    if(m_img.isNull())
        return;

    //声明一个QMatrix类的实例,并按照2倍比例对水平和垂直方向进行缩小,当前图形按照该坐标矩阵进行转换
    QMatrix martix;
    martix.scale(0.5,0.5);
    m_img = m_img.transformed(martix);
    //重新设置显示图形
    ui->label->setPixmap(QPixmap::fromImage(m_img));

3.3顺时针旋转

    if(m_img.isNull())
        return;

    //声明一个QMatrix类的实例,并按照2倍比例对水平和垂直方向进行缩小,当前图形按照该坐标矩阵进行转换
    QMatrix martix;
    martix.rotate(90);
    m_img = m_img.transformed(martix);
    //重新设置显示图形
    ui->label->setPixmap(QPixmap::fromImage(m_img));

3.4逆时针旋转

    if(m_img.isNull())
        return;

    //声明一个QMatrix类的实例,并按照2倍比例对水平和垂直方向进行缩小,当前图形按照该坐标矩阵进行转换
    QMatrix martix;
    martix.rotate(-90);
    m_img = m_img.transformed(martix);
    //重新设置显示图形
    ui->label->setPixmap(QPixmap::fromImage(m_img));

3.5横向镜像

    //QImage::mirrored(bool horizontal,bool vertical);

    if(m_img.isNull())
        return;

    m_img = m_img.mirrored(true,false);
    //重新设置显示图形
    ui->label->setPixmap(QPixmap::fromImage(m_img));

3.6纵向镜像

    //QImage::mirrored(bool horizontal,bool vertical);

    if(m_img.isNull())
        return;

    m_img = m_img.mirrored(false,true);
    //重新设置显示图形
    ui->label->setPixmap(QPixmap::fromImage(m_img));

4.像素颜色变化

4.1灰度

   int w = m_img.width();
   int h = m_img.height();

   QImage iGray(w,h,QImage::Format_ARGB32);

   for(int i = 0; i < w;i++)
   {
       for(int j = 0;j < h;j++)
       {
           QRgb pixel = m_img.pixel(i,j);
           //int gray = qGray(pixel);
           int gray = qBlue(pixel);
           QColor color(gray,gray,gray,qAlpha(pixel));
           iGray.setPixel(i,j,color.rgb());
       }
   }
   //重新设置显示图形
   ui->label->setPixmap(QPixmap::fromImage(iGray));

5.图像另存

   QString file = QFileDialog::getSaveFileName(this,"save image","./","PNG files(*.png);;JPG files(*.jpg);;ICON files(*.ico)");
   if(file != "")
   {
      m_img.save(file);
   }
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值