當前位置:首頁 » 硬碟大全 » qpixmap的緩存限制
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

qpixmap的緩存限制

發布時間: 2023-01-15 07:57:20

Ⅰ Qt 之 QBitmap

QBitmap 類提供單色(monochrome,1位深度)像素圖。

QBitmap類是單色的 off-screen 繪畫設備,主要用於創建自定義 QCursor 和 QBrush 對象,構造 QRegion 對象以及為像素圖(pixmaps)和小部件(widgets)設置蒙版。

QBitmap 是確保深度為 1 的 QPixmap 子類,深度為 0 的空對象除外。如果將深度大於 1 的像素圖分配給點陣圖,則點陣圖將自動抖動。

在 QBitmap 對象(或深度為 1 的 QPixmap 對象)上繪制時,請使用 QColor 對象 color0 和 color1 。使用 color0 進行繪制會將點陣圖位設置為 0,使用 color1 進行繪制會將點陣圖位設置為 1。對於點陣圖,0 位表示背景(或透明像素),而 1 位表示前景(或不透明像素)。使用 clear() 函數將所有位設置為 color0 。請注意,使用黑色和白色是沒有意義的,因為 QColor::pixel() 值對於黑色不一定為 0,對於白色不一定為 1。

QBitmap 類提供了 transformd() 函數,該函數返回點陣圖的轉換後的副本;使用 QTransform 參數平移,縮放,剪切和旋轉點陣圖。另外, QBitmap 提供了靜態的 fromData() 函數,該函數返回從給定的 uchar 數據構造的點陣圖,以及靜態的 fromImage() 函數,返回轉換後的 QImage 對象的副本。

就像 QPixmap 類一樣, QBitmap 通過使用隱式數據共享進行了優化。有關更多信息,請參見 Implicit Data Sharing 文檔。

Ⅱ QT 三大繪圖類:QPixmap/QImage/QPicture

QPixmap 、 QImage 、 QPicture 都是 QPaintDevice 的子類。

QPixmap 的設計本來就是用來加速顯示,用 paint 繪圖時用 QPixmap 會比其他類的效果好很多。一般小圖片用 QPixmap 。

QPixmap 也可以接受一個字元串作為一個文件的路徑來顯示這個文件,比如你想在程序之中打開 BMP、GIF、JPG、JPEG、PNG 等文件,就可以使用 QPixmap 。使用 QPainter 的 drawPixmap() 函數可以把這個文件繪制到一個 QLabel 、 QPushButton 或者其他的設備上面。 QPixmap 是針對屏幕進行特殊優化的,因此,它與實際的底層顯示設備息息相關。注意,這里說的顯示設備並不是硬體,而是操作系統提供的原生的繪圖引擎。所以,在不同的操作系統平台下, QPixmap 的顯示可能會有所差別。 QPixmap 提供了靜態的 grabWidget() 和 grabWindow() 函數,用於將自身圖像繪制到目標上。同時,在使用 QPixmap 時,你可以直接使用傳值也不需要傳指針,因為 QPixmap 提供了「隱式數據共享」,即傳遞 QPixmap 不必須使用指針。

更多參考: QPixmap

QBitmap 繼承自 QPixmap ,因此具有 QPixmap 的所有特性。 QBitmap 的色深始終為 1. 色深這個概念來自計算機圖形學,是指用於表現顏色的二進制的位數。我們知道,計算機裡面的數據都是使用二進製表示的。為了表示一種顏色,我們也會使用二進制。比如我們要表示8種顏色,需要用 3 個二進制位,這時我們就說色深是 3. 因此,所謂色深為 1,也就是使用 1 個二進制位表示顏色。1 個位只有兩種狀態:0 和 1,因此它所表示的顏色就有兩種,黑和白。所以說, QBitmap 實際上是只有黑白兩色的圖像數據。由於 QBitmap 色深小,因此只佔用很少的存儲空間,所以適合製作游標( QCursor )或者筆刷( QBrush )。

既然依賴軟體,那麼就不需要用硬體 GUI 的線程了,可以開個軟體的線程,可提高用戶 UI 體驗。

例子:

QImage 使用 Qt 自身的繪圖引擎,可提供在不同平台上相同的圖像呈現效果,並可通過 pixel() 、 setPixpel() 等方法直接存取和修改指定的像素。

QPicture 是一個繪畫設備類,它記錄了並可以重演 QPainter 的命令。你可以使用 QPainter 的 begin() 方法,指定在 QPicture 上繪圖,使用 end() 方法結束繪圖,使用 QPicture 的 save() 方法將 QPainter 所使用過的繪圖指令存至檔案。要重播繪圖指令的話,建立一個 QPicture ,使用 load() 方法載入繪圖指令的檔案,然後在指定的繪圖裝置上繪制 QPicture 。

記錄繪制的圖形:

接著便可在您的繪圖設備重畫已經保存的圖形:

更多參考: QPicture¶

QPixmap 跟硬體是相關的,如 X11, Mac 以及 Symbian 平台上, QPixmap 是存儲在伺服器端,而 QImage 則是存儲在客戶端,在 Windows 平台上, QPixmap 和 QImage 都是存儲在客戶端,並不使用任何的GDI資源。

在 X11, Mac 以及 Symbian 平台上,因為 QImage 是存儲在客戶端,往 QImage 上繪圖比較快,但顯示它則比較慢。因為 QPixmap 是存儲在伺服器端,往 QPixmap 上繪圖比較慢,但顯示它則比較快。但在 Windows 平台上則是是一樣的,因為它們都存儲在客戶端。

QImage 是設計並優化來為 I/O操作的,可以直接訪問和操作像素,而 QPixmap 是設計並優化來在屏幕上顯示圖片的。 QBitmap 僅是繼承自 QPixmap 的一個方便使用的類,是為了確保圖片的深度為1。 QPicture 是繪圖設備,可以用來重現 QPainter 命令。

Ⅲ 用qt代碼怎樣編寫圖片保存格式

qt提供了多個保存圖片的介面,比較常用的介面如下
bool QPixmap::save ( const QString & fileName, const char * format = 0, int quality = -1 ) const
參數說明:
fileName 文件的路徑
可選參數:format 圖片的格式(qt目前支持的格式見下表),如果未設置該值
則根據文件路徑的後綴名來判斷圖片的存儲格式。
可選參數:quality 圖片的質量(可設置成0-100之內的值,數值越大說明保存的質量越好),如果未設置該值,則按照默認的設置來保存圖片。
表一:qt 4.6.3支持的文件格式
格式 描述
BMP Windows Bitmap
JPG Joint Photographic Experts Group
JPEG Joint Photographic Experts Group
PNG Portable Network Graphics
PPM Portable Pixmap
TIFF Tagged Image File Format
XBM X11 Bitmap
XPM X11 Pixmap

bool QImage::save ( const QString & fileName, const char * format = 0, int quality = -1 ) const
參數說明同上;
這里舉個使用QPixmap保存圖片的例子:
QPixmap pixmap;
if(pixmap.load("D:\\images\\source.png"))
{
if(pixmap.save("distance.jpg"))
{
//save image successful
}else
{
//save image failure;
}
}else
{
//load image failure
}
註:如果需要對圖片的保存參數進行更多的設置,可以使用QImageWriter提供的介面來實現

Ⅳ QPixmap,QImage,QBitmap和QPicture的區別

Qt上圖片處理使用QPixmap和QImage時最多了,不過既然談到圖片了,我們把其他幾個圖片處理類也說一下:QBitmap只是一個繼承於QPixmap的簡單類,它可以確保圖片深度為1。QBitmap是QPixmap的子類,提供單色圖像,可以用來製作游標(QCursor)或者筆刷(QBrush)。

Ⅳ Qt載入不了圖片

清理緩存,無效的話 卸載 重新安裝

Ⅵ 初學QT QPixmap:It is not safe to use Pixmaps outside the GUI thread 報錯如上 如何解決 拜託高手指教

Qt只允許主線程使用界面類,因為界面類不是線程安全的,不可重入,在多個線程中使用可能會出現問題,因此Qt不建議主界面線程外的線程使用圖形類和調用圖形類介面。建議你修改最初的設計,讓界面與控制分離,主線程主要做界面顯示,次線程使用signal-slot控制主線程中的界面類,從而間接達到控制目的,connect時指定slot在主線程中運行

Ⅶ 怎麼的QPixmap無法載入資源文件

第一:資源文件一個.qrc 文件的例子:images/.png images/cut.png images/new.png images/open.png images/paste.png images/save.png.qrc 文件中列出的資源文件是程序的源碼樹的一部分。指定的路徑是 .qrc 文件所在目錄的相對路徑。注意,列出的資源文件必須位於 .qrc 文件所在目錄或者其子目錄下。資源數據也能被編譯進二進制文件中,因此應用程序代碼可以立即訪問;也可以創建一個二進制資源,稍後在程序中登記了資源體系的代碼中指定。預設時,程序可以用資源在源碼樹中的名稱加一個 :/ 前綴來訪問它。例如,在程序的源碼樹中是 images/cut.png 的文件可以通過 :/images/cut.png 來訪問。但也可以用 file 標簽中的 alias 屬性來指定:images/cut.png這時該文件可以通過 :/cut-img.png 來訪問。也可以在 .qrc 文件中用 qresource 標簽的 prefix 屬性:它可以為 .qrc 文件中所有文件指定一個前綴: images/cut.png這時該文件可以用 :/myresources/cut-img.png 訪問。第二:運用QLABEL 顯示圖片把你的label.png放到工程目錄頂層,直接QPixmap pixmap(":/label");//此處;label是圖片別名,注意是否有前綴ui->title_label->setPixmap(pixmap);ui->title_label->show();

Ⅷ 100分求助QT編程高手,關於QGraphicsView內存泄露的問題。

樓上說的對 你這種創建對象的方式屬於在棧上創建 棧上的東西當函數結束 或跳出當前的中括弧後就自動釋放 我覺得重復這段代碼沒有問題 主要是程序邏輯的實現 要把這段代碼放在一個槽函數里不會有問題的

Ⅸ Qt中使用QPixmap時,怎樣使得添加默認路徑或者其他路徑的圖片啊,是不是所有的圖片都支持還是有什麼區別

QString myDirPath = QString::fromLocal8Bit("C:\\documents and settings\\xxxx\\桌面");
QDir myDir = QDir(myDirPath);
myDirPath = myDir.exists() ? myDirPath:QDir::homePath();
m_fileName = QFileDialog::getOpenFileName(this, tr("Select Image:"),
myDirPath,
tr("Images (*.jpg *.png *.tif *.ico *.bmp *.gif)"));

QT支持jpg, png, tif, ico, bmp, gif等等大多數的圖片格式,其中部分是以插件的形式支持。
希望對你有所幫助