Qt4 Gossip: QPixmap、QBitmap、QImage 與 QPicture

转载 2012年03月30日 14:19:19
在處理影像資料上,Qt提供了QPixmap、QBitmap、QImage與QPicture等類別。

QPixmap繼承了QPaintDevice,您可用以建立QPainter並於上進行繪圖,您也可以直接指定圖案載入Qt所支援的圖檔,像是BMP、GIF、JPG、JPEG、PNG等,並使用QPainter的drawPixmap()繪製在其它的繪圖裝置上。您可以在QLabel、QPushButton上設定QPixmap以顯示圖像。QPixmap是針對螢幕顯示圖像而設計並最佳化,依賴於所在平台的原生繪圖引擎,所以一些效果的展現(像是反鋸齒
),在不同的平台上可能會有不一致的結果。

QBitmap是QPixmap的子類別,提供單色圖像,可用於製作游標(QCursor)或筆刷(QBrush)物件。下面的程式載入相同的圖檔,以觀看QPixmap與QBitmap的呈現效果:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QBitmap>

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

執行後的結果如下圖所示:



QPixmap使用平台的繪圖引擎,在不同的平台所呈現的效果不一,無法提供個別像素的存取,QImage使用Qt自身的繪圖引擎,可提供在不同平台上相同的圖像呈現效果,並可透過setPixpel()、pixel()等方法,直接存取指定的像素,例如在Qt的QImage文件中,就有提供以下的範例:

 QImage image(3, 3, QImage::Format_RGB32);
 QRgb value;

 value = qRgb(189, 149, 39); // 0xffbd9527
 image.setPixel(1, 1, value);

 value = qRgb(122, 163, 39); // 0xff7aa327
 image.setPixel(0, 1, value);
 image.setPixel(1, 0, value);

 value = qRgb(237, 187, 51); // 0xffedba31
 image.setPixel(2, 1, value);

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 picture;
picture.load("draw_record.pic"); 
QPainter painter;
painter.begin(this);
painter.drawPicture(0, 0, picture);
painter.end();

QPixmap、QImage、QBitmap和QPicture的区别

·QImage与Qpixmap的区别      1、QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的     ...
  • u011348999
  • u011348999
  • 2014年05月19日 15:57
  • 1913

QPixmap,QBitmap,QImage,QPicture

QPixmap专门为图像在屏幕上的显示做了优化; QBitmap是QPixmap 的一个子类,它的色深限定为 1,你可以使用QPixmap的 isQBitmap()函数来确定这个QPixmap是不是一...
  • liuyanfeier
  • liuyanfeier
  • 2016年10月06日 13:15
  • 581

QPixmap、QBitmap、QImage 與 QPicture

在處理影像資料上,Qt提供了QPixmap、QBitmap、QImage與QPicture等類別。 一. 几种类的简介 QPixmap繼承了QPaintDevice,您可用以建立QPaint e...
  • sky_freebird
  • sky_freebird
  • 2011年08月15日 15:38
  • 21321

QPixmap/QImage/QPicture

QImage与Qpixmap的区别 1、QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的 2、QPixma...
  • cc96610536
  • cc96610536
  • 2013年05月14日 11:46
  • 1933

关于QPixmap/QImage/QPicture

绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。其中,QPixmap专门为图像在屏幕上的显示做了...
  • zzwdkxx
  • zzwdkxx
  • 2014年09月22日 19:38
  • 7782

Qt的4个图像类QImage/QPixmap/QBitmap/QPicture 转

原文地址:http://www.cnblogs.com/s_agapo/archive/2012/03/14/2395603.html (一)QPixmap和QImage的区别 ...
  • JJM152768JJM
  • JJM152768JJM
  • 2013年09月28日 23:10
  • 815

QPixmap、 QBitmap、QImage 與 QPicture

在處理影像資料上,Qt提供了QPixmap、QBitmap、QImage與QPicture等類別。 QPixmap繼承了QPaintDevice,您可用以建立QPainter並於上進行繪圖,您也...
  • xiexiaopingroma
  • xiexiaopingroma
  • 2011年03月20日 12:20
  • 912

Qt 图像类 QImage QPixmap QBitmap QPicture 之区别与用途

自己整理的,备忘录,参考Qt自带帮助: qthelp://com.trolltech.qt.486/qdoc/qpixmap.html#details Qt provides four class...
  • cibiren2011
  • cibiren2011
  • 2016年03月22日 22:17
  • 2629

Convert OpenCV (iplImage) to PyQt5 QImage/QPixmap in Python

转载于 https://stackoverflow.com/questions/33741920/convert-opencv-3-iplimage-to-pyqt5-qimage-qpixmap-...
  • chencaw
  • chencaw
  • 2017年10月28日 19:18
  • 165

QPixmap、QBitmap、QImage 与 QPicture

Qt在图像方面提供了QPixmap、QBitmap、QImage、QPicture这些类,他们在使用时存在着一些区别,需要引起注意。 一. 几种类的简介 QPixmap继承了QPaintDev...
  • yngaocn
  • yngaocn
  • 2015年03月01日 00:29
  • 404
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt4 Gossip: QPixmap、QBitmap、QImage 與 QPicture
举报原因:
原因补充:

(最多只允许输入30个字)