QPixmap QBitmap QImage QPicture区别

继承关系

    QPaintDevice->QPixmap->QBitmap
    QPaintDevice->QImage
    QPaintDevice->QPicture

区别

共同点

  • 都继承于QPaintDevice, 是绘图设备。也就是说QPainter能够在任何QPainteDevice的子类上进行绘制。

不同点

  • QPixmap
  1. 专门为图像在屏幕上的显示做了优化
  2. 在不同的操作系统平台下,QPixmap的显示可能有所差别(因为QPixmap依赖于所在平台的绘图引擎)
  • QBitmap
  1.     QBitmap是QPixmap的一个子类(因此具有QPixmap的所有特性)。它的色深限定为1,可以使用QPixmapisQBitmap()函数来确定这个QPixmap是不是一个QBitmap
  2.     QBitmap所表示的颜色就只有两种:黑,白(QBitmap实际上是只有黑白两色的图像数据)
  3.     由于QBitmap色深小(色深限定为1),因此占用存储控件少,适合做光标文件和笔刷
  • QImage
  1.     主要是用于图像IO、图片访问和像素修改,专门为图像的像素级访问做了优化。
  2.     使用Qt自身的绘图引擎,可在不同平台上具有相同的显示效果。
  3.     提供了像素级别的操作
  4.     QImage是独立于硬件,可以在另一个线程中对其进行绘制,不需要在GUI线程中处理(可以提高UI响应速度)
  • QPicture
  1. 可以记录和重现QPainter的各条命令:QPicture将QPainter的命令序列化到一个IO设备,保存为一个平台独立的文件格式。

Demo

QPixmap

void PaintDeviceDemo::drawPixmap(QPainter& painter)
{
    QPixmap pixmap(":/setting");
    QRect rect(0, 0, 100, 100);
    painter.drawPixmap(rect, pixmap, pixmap.rect());
}

QBitmap

void PaintDeviceDemo::drawBitmap(QPainter& painter)
{
    QBitmap bitmap(":/setting");
    QRect rect(100, 0, 100, 100);
    painter.drawPixmap(rect, bitmap, bitmap.rect());
    // 如果图片中有白色,则用QBitmap加载时不会显示白色部分
    // 如果图片中有透明色,则用QBitmap加载时会转换成黑色
}

QImage

void PaintDeviceDemo::drawImage(QPainter& painter)
{
    QImage image(":/setting");
    QColor red(255, 0, 0);
    image.setPixelColor(0, 0, red);
    painter.drawImage(QRect(200, 0, 100, 100), image, image.rect());
}

QPicture

PaintDeviceDemo::PaintDeviceDemo(QWidget *parent)
    : QWidget(parent)
{
    // 绘制一个矩形,并保存到rect.pic文件中
    QPicture picture;
    QPainter painter;
    drawPicture(painter,"rect.pic");
    // 在paintEvent函数中调用loadPicture函数
}

void PaintDeviceDemo::loadPicture(const QString& path,QPainter& painter)
{
    QPicture picture;
    picture.load(path);
    uint size = picture.size();
    painter.begin(this);
    painter.drawPicture(0, 100, picture);
    painter.end();
}

运行结果截图

 

目录

继承关系

区别

共同点

不同点

Demo

QPixmap

QBitmap

QImage

QPicture


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值