图像处理QPixmap、Picture、QBitmap

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

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

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

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

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

构造函数:

图像处理QPixmap、Picture、QBitmap_第1张图片

 常用函数:

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、Picture、QBitmap_第2张图片

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、Picture、QBitmap_第3张图片

QPixmap的一些函数使用:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPixmap pixmap("D:/456.png");
    qDebug()<

图像处理QPixmap、Picture、QBitmap_第4张图片

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
}
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、Picture、QBitmap_第5张图片

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);

}

图像处理QPixmap、Picture、QBitmap_第6张图片

 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);
   
}

图像处理QPixmap、Picture、QBitmap_第7张图片

 重播图片:

注意重播只能使用.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);
}

图像处理QPixmap、Picture、QBitmap_第8张图片

 

你可能感兴趣的:(QT学习,qt)