溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

QT Q Image QPixmap ·QBitmap 三者區(qū)別

發(fā)布時間:2020-07-27 14:38:08 來源:網(wǎng)絡 閱讀:3358 作者:WZM3558862 欄目:開發(fā)技術

QImage與Qpixmap的區(qū)別


1、QPixmap主要是用于繪圖,針對屏幕顯示而最佳化設計,QImage主要是為圖像I/O、圖片訪問和像素修改而設計的


2、QPixmap依賴于所在的平臺的繪圖引擎,故例如反鋸齒等一些效果在不同的平臺上可能會有不同的顯示效果,QImage使用Qt自身的繪圖引擎,可在不同平臺上具有相同的顯示效果


3、目前的Qt會把QPixmap都存儲在graphics memory中,QImage是存儲在客戶端的,是獨立于硬件的。在 X11, Mac 以及 Symbian平臺上,QPixmap 是存儲在服務器端,而QImage則是存儲在客戶端,在Windows平臺上,QPixmap和QImage都是存儲在客戶端,并不使用任何的GDI資源。


4、由于QImage是獨立于硬件的,也是一種QPaintDevice,因此我們可以在另一個線程中對其進行繪制,而不需要在GUI線程中處理,使用這一方式可以很大幅度提高UI響應速度。


5、QImage可通過setPixpel()和pixel()等方法直接存取指定的像素,Qt的文檔中有如下例程:



QImage p_w_picpath(3, 3, QImage::Format_RGB32);

QRgb value;

value = qRgb(189, 149, 39);

p_w_picpath.setPixel(1, 1, value);

value = qRgb(122, 163, 39);

p_w_picpath.setPixel(0, 1, value);

p_w_picpath.setPixel(1, 0, value);

value = qRgb(237, 187, 51);

p_w_picpath.setPixel(2, 1, value);



QT Q Image  QPixmap  ·QBitmap 三者區(qū)別




·QImage的顯示


·QPainter中繪制QImage的接口原型:


void QPainter::drawImage ( int x, int y,

const QImage & p_w_picpath,

int sx = 0, int sy = 0,

int sw = -1, int sh = -1,

Qt::ImageConversionFlags flags = Qt::AutoColor )


其中x和y為繪制位置,sx和sy是指圖像左上角的坐標,sw和sh是指定了圖像的大小,如果都為0或負數(shù),就顯示完整個圖像。


QImage p_w_picpath;

p_w_picpath.load( ":/pics/earth.png" );


QPainter painter(this);

painter.drawImage(0,0, p_w_picpath);


·當圖片較大時,我們可以先通過QImage將圖片加載進來,然后把圖片縮放成需要的尺寸,最后轉換成QPixmap 進行顯示。


QImage p_w_picpath;

p_w_picpath.load( ":/pics/earth.png" );


QPainter painter(this);

QPixmap pixmapToShow = QPixmap::fromImage( p_w_picpath.scaled(size(), Qt::KeepAspectRatio) );

painter.drawPixmap(0,0, pixmapToShow);




·QBitmap與QPixmap


·QBitmap是QPixmap的一個子類,主要用于顯示單色位圖。用于制作游標QCursor或筆刷QBrush等,圖像顯示對比如下


QPixmap pixImg("caterpillar.jpg");

QBitmap bitImg("caterpillar.jpg");

QPainter painter(this);

painter.drawPixmap(0, 0, pixImg);

painter.drawPixmap(200, 0, bitImg);



QT Q Image  QPixmap  ·QBitmap 三者區(qū)別


·QPicture


·QPicture則是一個繪圖裝置,用于記錄和重播Qpainter的繪圖指令。

·使用begin()方法在QPicture上進行繪圖,使用end()結束繪圖,使用save()保存至檔案


QPicture picture;

QPainter painter;

painter.begin(&picture);

painter.drawRect(10, 20, 100, 50);

painter.end();

picture.save("draw_record.pic");


需重播繪圖指令的話,新建一個QPicture對象,使用load()重新載入保存的檔案,然后再在指定的繪圖設備QDevice上繪制QPicture:


QPicture picture;

picture.load("draw_record.pic");

QPainter painter;

painter.begin(this);

painter.drawPicture(0, 0, picture);

painter.end();


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI