• 图像处理QPixmap、Picture、QBitmap


    QPixmap 类是一种可用作绘制设备的屏幕外图像表示形式。

    QPixmap可以使用QLabel或QAbstractButton的子类之一可以轻松显示在屏幕上

    QPixmap 对象可以按值传递,因为 QPixmap 类使用隐式数据共享,也可以流式传输。

    QPixmap可以和QImage之间进行转换:

    • QPixmap 转  QImage     使用 toImage函数
    • QImage   转  QPixmap   使用QPainter::fromImage

    构造函数:

     常用函数:

    size()图像大小
    width()宽度
    height()高度
    toImage()转换为QImage
    setDevicePixeRatio()设置像素映射的设备像素比率
    scroll()滚动矩阵
    scaled()对图像进行缩放
    load()打开文件
    save()保存文件
    fill()填充
    depth()图像深度
    setMask()使用

    QPximap在label中的使用:(其他按键控件也可使用)

    1. QLabel *label=new QLabel(this);
    2. label->resize(303,303);//设置大小
    3. QPixmap pixmap(":/image/456.png");
    4. pixmap.scaled(label->width(),label->height());
    5. label->setPixmap(pixmap);

    QPixmap可以和QImage之间的转换

    1. void Widget::paintEvent(QPaintEvent *event)
    2. {
    3. QPainter painter(this);
    4. QImage image("D:/456.png");
    5. image.setDevicePixelRatio(3);
    6. painter.drawImage(0,0,image);
    7. QPixmap pixmap=QPixmap::fromImage(image);//QImage转QPixmap
    8. painter.drawPixmap(100,100,pixmap);
    9. painter.drawImage(200,200,pixmap.toImage());//QPixmap转QImage
    10. }

    QPixmap的一些函数使用:

    1. void Widget::paintEvent(QPaintEvent *event)
    2. {
    3. QPainter painter(this);
    4. QPixmap pixmap("D:/456.png");
    5. qDebug()<<pixmap.size();//图片大小
    6. qDebug()<<pixmap.width();//图片宽度
    7. qDebug()<<pixmap.height();//图片高度
    8. qDebug()<<pixmap.depth();//图片深度
    9. pixmap.scaled(400,400);//缩放
    10. pixmap.fill(Qt::gray);//设置填充
    11. painter.drawPixmap(0,0,pixmap);
    12. }

    setMask的使用:遮罩

    实现不规则窗体,鼠标右键窗体关闭窗口,左键长按可以拖动窗口

    widget.h文件添加:

    1. protected:
    2. void paintEvent(QPaintEvent *event);//画家事件
    3. void mousePressEvent(QMouseEvent *event);//鼠标点击事件
    4. void mouseMoveEvent(QMouseEvent *event);//鼠标移动事件
    5. QPoint point;//点位

    widget.cpp中实现:

    1. void Widget::paintEvent(QPaintEvent *event)
    2. {
    3. QPainter painter(this);
    4. QPixmap pixmap(":/image/456.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
    5. this->setMask(pixmap.mask());//需要添加头文件#include<QBitmap>
    6. }
    7. void Widget::mousePressEvent(QMouseEvent *event)
    8. {
    9. if(event->button()==Qt::RightButton)//右键点击 关闭窗口
    10. {
    11. close();
    12. }
    13. point=event->globalPos()-frameGeometry().topLeft();//获取差值
    14. event->accept();
    15. }
    16. void Widget::mouseMoveEvent(QMouseEvent *event)
    17. {
    18. if(event->buttons()&Qt::LeftButton)
    19. {
    20. move(event->globalPos()-point);
    21. event->accept();
    22. }
    23. }

    QPixmap绘制图像:

    QPixmap的底色默认为黑色,可以自己使用fill()添加底色。

    1. void Widget::paintEvent(QPaintEvent *event)
    2. {
    3. QPainter painter;
    4. QPixmap pixmap(200,200);//设置图片大小
    5. painter.begin(&pixmap);//给pixmap绘制
    6. painter.setPen(Qt::red);
    7. painter.setBrush(Qt::cyan);
    8. painter.drawRect(0,0,100,100);
    9. painter.drawEllipse(100,100,100,100);
    10. painter.end();
    11. painter.begin(this);
    12. painter.drawPixmap(100,100,pixmap);
    13. }

     QPicture

    QPicture 类是一种绘制设备,用于记录和重播QPainter命令。QPicture与分辨率无关,即QPicture可以显示在不同的设备上

     QPicture绘制图形:

    1. void Widget::paintEvent(QPaintEvent *event)
    2. {
    3. QPainter painter;
    4. QPicture picture;
    5. painter.begin(&picture);
    6. painter.drawRect(0,0,100,100);
    7. painter.drawEllipse(100,100,100,100);
    8. painter.end();
    9. painter.begin(this);
    10. painter.drawPicture(0,0,picture);
    11. }

     重播图片:

    注意重播只能使用.pic文件

     先绘制一个图形,保存为.pic文件

    1. void Widget::paintEvent(QPaintEvent *event)
    2. {
    3. QPainter painter;
    4. QPicture picture;
    5. painter.begin(&picture);
    6. painter.drawEllipse(100,100,100,100);
    7. painter.end();
    8. picture.save("D:/picture.pic");
    9. painter.begin(this);
    10. painter.drawPicture(0,0,picture);
    11. }

    然后进行重播

    1. void Widget::paintEvent(QPaintEvent *event)
    2. {
    3. QPainter painter;
    4. QPicture picture;
    5. picture.load("D:/picture.pic");
    6. painter.begin(this);
    7. painter.drawPicture(0,0,picture);
    8. }

    QBitmap

    QBitmap 类是一种单色屏幕外绘画设备,主要用于创建自定义QCursor和QBrush对象、构造QRegion对象以及为像素图和小部件设置蒙版。

    QBitmap绘制图形:

    1. void Widget::paintEvent(QPaintEvent *event)
    2. {
    3. QPainter painter;
    4. QBitmap bitmap(200,200);
    5. painter.begin(&bitmap);
    6. painter.setBrush(Qt::cyan);
    7. painter.drawRect(0,0,100,100);
    8. painter.end();
    9. painter.begin(this);
    10. painter.drawPixmap(0,0,bitmap);
    11. }

     

  • 相关阅读:
    Intel@cpu产品参数和命名@单核睿频和全核睿频
    算法---矩阵中战斗力最弱的 K 行(Kotlin)
    小程序常见故障解决方法分享|微信小程序平台常见拒绝情形
    Spring Boot2中如何优雅地个性化定制Jackson
    分布式系统中线程和进程的机制问题
    《计算几何》学习笔记
    【LeetCode】2511.最多可以摧毁的敌人城堡数目
    【OpenCV图像处理12】特征检测与匹配
    网址打包微信小程序源码 wap转微信小程序 网站转小程序源码 网址转小程序开发
    tomcat部署web项目报错:Could not initialize class sun.awt.X11GraphicsEnvironment
  • 原文地址:https://blog.csdn.net/qq_45303986/article/details/128036018