图像处理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中的使用:(其他按键控件也可使用)

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

QPixmap可以和QImage之间的转换

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

QPixmap的一些函数使用:

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

setMask的使用:遮罩

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

widget.h文件添加:

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

widget.cpp中实现:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPixmap pixmap(":/image/456.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
    this->setMask(pixmap.mask());//需要添加头文件#include<QBitmap>
}
void Widget::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::RightButton)//右键点击  关闭窗口
    {
        close();
    }
    point=event->globalPos()-frameGeometry().topLeft();//获取差值
    event->accept();
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons()&Qt::LeftButton)
    {
        move(event->globalPos()-point);
        event->accept();
    }

}

QPixmap绘制图像:

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

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    QPixmap pixmap(200,200);//设置图片大小
    painter.begin(&pixmap);//给pixmap绘制
    painter.setPen(Qt::red);
    painter.setBrush(Qt::cyan);
    painter.drawRect(0,0,100,100);
    painter.drawEllipse(100,100,100,100);
    painter.end();
    painter.begin(this);
    painter.drawPixmap(100,100,pixmap);

}

 QPicture

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

 QPicture绘制图形:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    QPicture picture;
    painter.begin(&picture);
    painter.drawRect(0,0,100,100);
    painter.drawEllipse(100,100,100,100);
    painter.end();
    painter.begin(this);
    painter.drawPicture(0,0,picture);
   
}

 重播图片:

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

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

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    QPicture picture;
    painter.begin(&picture);
    painter.drawEllipse(100,100,100,100);
    painter.end();
    picture.save("D:/picture.pic");
    painter.begin(this);
    painter.drawPicture(0,0,picture);  
}

然后进行重播

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    QPicture picture;
    picture.load("D:/picture.pic");
    painter.begin(this);
    painter.drawPicture(0,0,picture);
}

QBitmap

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

QBitmap绘制图形:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    QBitmap bitmap(200,200);
    painter.begin(&bitmap);
    painter.setBrush(Qt::cyan);
    painter.drawRect(0,0,100,100);
    painter.end();
    painter.begin(this);
    painter.drawPixmap(0,0,bitmap);
}

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值