QPixmap 和 QImage区别


QPixmap
是专门为绘图而生,当需要绘制图片时你需要使用QPixmap。 QImage则是为I/O,为图片像素访问以及修改而设计的。如果你想访问图片的像素或是修改图片像素,则需要使用QImage,或者借助于 QPainter来操作像素。另外跟QImage不同是,QPixmap跟硬件是相关的,如X11, Mac 以及 Symbian平台上,QPixmap 是存储在服务器端,而QImage则是存储在客户端,在Windows平台上,QPixmap和QImage都是存储在客户端,并不使用任何的GDI资源。

相信大家更关心的是谁比较快,哈哈,现在来总结一下:
在X11, Mac 以及 Symbian平台上,QImage: 因为它是存储在客户端,往QImage上绘图比较快,但显示它则比较慢。QPixmap: 因为它是存储在服务器端,往QPixmap上绘图比较慢,但显示它则比较快。但在Windows平台上则是是一样的,因为它们都存储在客户端。

Qt上图片处理使用QPixmap和QImage时最多了,不过既然谈到图片了,我们把其他几个图片处理类也说一下:
QBitmap只是一个继承于QPixmap的简单类,它可以确保图片深度为1。
QBitmap是QPixmap的子类,提供单色图像,可以用来制作游标(QCursor)或者笔刷(QBrush)。我们可以通过以下代码看出两者的区别:
class PainterWidget : public QWidget {

protected:

    void paintEvent(QPaintEvent*);

};

void PainterWidget::paintEvent(QPaintEvent *event) {

    QPixmap pixImg("caterpillar.jpg");

    QBitmap bitImg("caterpillar.jpg");

    QPainter painter(this);

    painter.drawPixmap(0, 0, pixImg);

    painter.drawPixmap(200, 0, bitImg);

}

int main(int argc, char *argv[]) {

    QApplication app(argc, argv);

   

    PainterWidget pWidget;

    pWidget.setWindowTitle("QPixmap & QBitmap");

    pWidget.resize(400, 150);

    pWidget.show();

   

    return app.exec();

}

 


执行效果如下图所示:

 

QPicture是一个绘画设备类,它记录了并可以重演QPainter的命令。你可以使用QPainter的begin()方法,指定在QPicture上绘图,使用
end()方法结束绘图,使用QPicture的save()方法將QPainter所使用过的绘图指令存至档案,例如:

QPicture

picture;

QPainter painter;

painter.begin(&picture);

painter.drawRect(10, 20, 100,

50);

painter.end();

picture.save("draw_record.pic");


要重播绘图指令的话,建立一個QPicture,使用load()方法载入绘图指令的档案,然后在指定的绘图裝置上绘制QPicture:要重播绘图指令的话,建立一個QPicture,使用load()方法载入绘图指令的档案,然后在指定的绘图裝置上绘制QPicture:

QPicture

picture;

picture.load("draw_record.pic");  

QPainter

painter;

painter.begin(this);

painter.drawPicture(0, 0, picture);

painter.end(); 


 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值