2012-04-25 54 views
56

我不明白QImage和QPixmap有什麼區別,它們似乎提供了相同的功能。什麼時候應該使用QImage,什麼時候應該使用QPixmap?QImage和QPixmap有什麼區別?

+0

我不知道如果我理解你的問題,但我認爲這是在文檔中很清楚:「 QImage針對I/O,直接像素訪問和操作進行設計和優化,而QPixmap則針對屏幕上的圖像進行設計和優化。「 http://doc.qt.nokia.com/latest/qpixmap.html#details – cgmb 2012-04-25 00:45:20

+1

耶!我已經發現了它,但不太明白,例如,針對I/O進行了優化並針對顯示進行了優化,這是差異平臺上顯示的picutre差異嗎? ..你能幫我做一個步驟來解釋..謝謝.. – 2012-04-25 00:50:04

+0

我仍然不是100%確定我知道你的意思,但如果你使用QWidgets,你可以在QLabel中顯示它。如果你使用的是QGraphicsView,你可以在QGraphicsPixmapItem中顯示它。如果您使用的是QML,Image元素將爲您處理所有事情。 – cgmb 2012-04-25 01:17:31

回答

37

通過讀取QImageQPixmap和該文檔Easilly回答:

的QPixmap類是可用於作爲塗料裝置的離屏圖像表示。

The QImage class提供了一個獨立於硬件的圖像表示形式,允許直接訪問像素數據,並且可以用作繪畫設備。

編輯:此外,從@戴夫的回答是:

你不能操縱GUI線程之外的QPixmap,但QImage的有沒有這樣的限制。

而且從@Arnold:

下面是通常(不總是)適用的簡短摘要:

  • 如果您打算處理的圖像,修改它,改變它的像素, 等,使用QImage。
  • 如果您計劃繪製同一圖像大於屏幕上一次 ,將其轉換爲QPixmap的。
+0

感謝您的幫助...什麼是一般過程,QPixmpa和QImage加載圖片..它在內存中是什麼..謝謝.. – 2012-04-26 02:46:07

+0

我不知道你在做什麼,但在[這個問題](http://stackoverflow.com/questions/9011108/image-scaling-keepaspectratiobyexpanding-through-opengl)我演示瞭如何從磁盤加載YV12數據,使用GLSL片段着色器轉換爲RGB,然後將其顯示在在QImage裏面的屏幕。如果你更清楚你想要完成什麼,我想我可以指出你正確的方向。 – karlphillip 2012-04-26 03:13:42

+0

感謝您的回答。 – 2012-04-26 04:03:35

29

Qt實驗室有一系列很好的文章,解釋了很多關於Qt圖形系統的文章。 This article特別在QImageQPixmap有一段。

下面是通常(不總是)適用的簡短摘要:

  • 如果您打算處理的圖像,修改它,改變它的像素等,使用QImage
  • 如果您計劃繪製同一圖像不止一次在屏幕上,將其轉換爲QPixmap
+0

謝謝。這段話告訴我們:有兩種不同的方式來加載圖片,光柵和OpenGL?是對的? – 2012-04-26 02:50:59

+0

我不太明白這個問題。 「光柵」和「OpenGL」都不具體表示加載圖片的方式。 – 2012-04-26 03:16:23

29

一個重要區別是,你不能創建或什麼,但主界面線程操縱QPixmap。你可以,但是,創建和操作後臺線程QImage實例,然後將它們傳遞迴GUI線程之後將它們轉換。

12

在工業環境中重要:

的QPixmap的存儲顯卡做在顯示器上。不是QImage。

所以,如果你運行的應用程序的服務器和客戶端站做顯示器,它是在網絡使用的期限很顯著。

使用Pixmap,重繪包括通過網絡發送只重繪(幾個八位字節)的命令。它包括與QImage的發送整個圖像(幾莫?...)

0
  • 的QPixmap 是一個「圖像對象」,其pixel表示是在你的代碼沒有結果,因此QPixmap的是爲了在顯示屏幕上呈現圖像而設計和優化,當使用X11時,它被存儲在XServer上,因此在XWindow上繪製QPixmap的速度比繪製QImages的快得多,因爲數據已經在服務器上並準備使用。

當使用的QPixmap:如果你只是想畫一個現有的圖像(圖標..背景壁紙等),特別是多次,然後用QPixmap的。

  • QImage的是所述客戶代碼的「在存儲器中的一個像素陣列」,是QImage的設計和優化用於I/O,以及用於直接訪問的像素和操縱。

當使用QImage的:如果你想畫,用Q漆,或操縱圖像的像素。

  • QBitmap僅僅是一個方便的QPixmap子類確保深度爲1,它的一個單色(1位深度)的pixmap。就像QPixmap一樣,QBitmap針對使用隱式數據共享進行了優化。
  • QPicture是塗料設備,記錄和重放QPainter的命令 - 繪圖 -