c语言编程笔录

首页 >   > 笔记大全

笔记大全

Qt图片绘图类之QPixmapQImageQPicture怎么使用

更新时间:2023-12-29
前言: 在Qt中,绘制图像是非常常见的。Qt提供三个不同的类来帮助绘制图像,它们分别是QPixmap、QImage和QPicture。本篇文章将介绍这三个类的用处、使用方法及一些使用技巧。

QPixmap类

QPixmap是一个用于显示图像的类,它支持很多类似于画刷、旋转、翻转等绘图操作,可以用高效的速度呈现出图像。一般情况下,QPixmap非常适合显示不需要频繁刷新的图像。下面是一个简单的例子,用QPixmap绘制一张图片:
    QPixmap pixmap(":/image/logo.png");  //加载图片
    QPainter painter(&pixmap);           //创建QPainter对象
    painter.setPen(Qt::red);             //设置画笔颜色
    painter.setFont(QFont("Arial", 30)); //设置字体
    painter.drawText(QRectF(0, 0, 400, 200), "Hello World!");  //绘制文字
    painter.drawLine(0, 0, 400, 200);    //绘制直线
    painter.end();                       //结束绘制
    QLabel label;
    label.setPixmap(pixmap);             //在QLabel中显示图片
    label.show();
上述代码首先用QPixmap加载一张图片,接着创建一个QPainter对象绘制文字、直线等图形。完成之后,用QLabel显示出这个pixmap即可。

QImage类

QImage是一个用于读写图像数据的类,与QPixmap不同,它支持直接对图像数据进行修改,可以实现更加自由灵活的图形操作。QImage支持很多常用的图形格式,如BMP、 JPG、GIF等。下面是一个简单的例子,用QImage实现一张灰度图片的腐蚀操作:
    QImage image(":/image/lena.bmp");  //加载图片
    QImage grayImage = image.convertToFormat(QImage::Format_Grayscale8); //转为灰度图
    int kernel[3][3] = {{1, 1, 1}, 
                        {1, 1, 1}, 
                        {1, 1, 1}}; //定义腐蚀核
    QImage resultImage(grayImage.size(), QImage::Format_Grayscale8); //定义结果图像
    for(int i=1; i

上述代码加载一张图像,并将其转换为灰度图,接着定义了一个3x3的腐蚀核,最后用两层循环遍历每个像素并计算其腐蚀值,最后将结果用QLabel显示出来。

QPicture类

QPicture是一个用于记录和重现QPainter命令序列的类,它可以记录和最初绘图的命令序列,随后可以使用这些命令序列重新绘制图像。QPicture非常适用于一些需要频繁重绘但难以计算的图像,比如复杂的曲线和图案等。下面是一个简单的例子,用QPicture在QLabel中绘制一个简单的圆形:
    QPicture picture;
    QPainter painter;
    painter.begin(&picture);
    painter.setPen(QPen(Qt::green));
    painter.drawEllipse(0, 0, 100, 100);
    painter.end();                      //绘制完毕
    QLabel label;
    label.setPicture(picture);           //在QLabel中显示QPicture
    label.show();
上述代码首先创建了一个QPicture对象,接着创建了一个QPainter对象进行绘制,最后将QPicture对象加入到QLabel中以显示。 总结: QPixmap、QImage和QPicture在Qt中是三个非常重要的图像处理类,它们分别适用于不同的图像场景,各具优缺点。掌握这三个类的使用方法将有助于我们更加高效地完成图像相关的任务。