網站首頁 編程語言 正文
前言
Qt 提供了四個類來處理圖像數據:QImage、QPixmap、QBitmap 和 QPicture。 QImage 是為 I/O 和直接像素訪問和操作而設計和優化的,而 QPixmap 是為在屏幕上顯示圖像而設計和優化的。 QBitmap只是一個繼承QPixmap的便利類,保證深度為1。如果QPixmap對象是位圖,isQBitmap()函數返回true,否則返回false。最后,QPicture 類是一個繪制設備,用于記錄和重放 QPainter 命令。
QPixmap & QImage
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 類用于加載圖像文件,可選地操作圖像數據,然后將 QImage 對象轉換為 QPixmap 以顯示在屏幕上。或者,如果不需要任何操作,可以將圖像文件直接加載到 QPixmap 中。
6、QPixmap使用底層平臺的繪制系統進行繪制,無法提供像素級別的操作,而QImage則是使用獨立于硬件的繪制系統,實際上是自己繪制自己,因此提供了像素級別的操作,并且能夠在不同系統之上提供一個一致的顯示形式。
可以把QImage想象成一個RGB顏色的二維數組,記錄了每一像素的顏色。
QBitmap
QBitmap繼承自QPixmap,因此具有QPixmap的所有特性。QBitmap的色深始終為1. 色深這個概念來自計算機圖形學,是指用于表現顏色的二進制的位數。我們知道,計算機里面的數據都是使用二進制表示的。為了表示一種顏色,我們也會使用二進制。比如我們要表示8種顏色,需要用3個二進制位,這時我們就說色深是3. 因此,所謂色深為1,也就是使用1個二進制位表示顏色。1個位只有兩種狀態:0和1,因此它所表示的顏色就有兩種,黑和白。所以說,QBitmap實際上是只有黑白兩色的圖像數據。
由于QBitmap色深小,因此只占用很少的存儲空間,所以適合做光標文件和筆刷。
QPicture
QPicture則是一個繪圖裝置,用于記錄和重播Qpainter的繪圖指令。
這是一個可以記錄和重現QPainter命令的繪圖設備。 QPicture將QPainter的命令序列化到一個IO設備,保存為一個平臺獨立的文件格式。這種格式有時候會是“元文件(meta- files)”。Qt的這種格式是二進制的,不同于某些本地的元文件,Qt的pictures文件沒有內容上的限制,只要是能夠被QPainter繪制的元素,不論是字體還是pixmap,或者是變換,都可以保存進一個picture中。
QPicture是平臺無關的,因此它可以使用在多種設備之上,比如svg、pdf、ps、打印機或者屏幕。回憶下我們這里所說的QPaintDevice,實際上是說可以有QPainter繪制的對象。QPicture使用系統的分辨率,并且可以調整 QPainter來消除不同設備之間的顯示差異。
·使用begin()方法在QPicture上進行繪圖,使用end()結束繪圖,使用save()保存至檔案
QPicture picture; QPainter painter; painter.begin(&picture); // paint in picture painter.drawEllipse(10,20, 80,70); // draw an ellipse painter.end(); // painting done picture.save("drawing.pic"); // save picture
需重播繪圖指令的話,新建一個QPicture對象,使用load()重新載入保存的檔案,然后再在指定的繪圖設備QDevice上繪制QPicture:
QPicture picture; picture.load("drawing.pic"); // load picture QPainter painter; painter.begin(&myImage); // paint in myImage painter.drawPicture(0, 0, picture); // draw the picture at (0,0) painter.end(); // painting done
參考:
- Qt 幫助文檔
- https://blog.csdn.net/zzwdkxx/article/details/39480559
原文鏈接:https://blog.csdn.net/luoyayun361/article/details/123366133
相關推薦
- 2022-07-08 Nginx將http轉換成https的詳細過程_nginx
- 2023-12-13 統計Excel單元格中某個字符出現的次數
- 2022-03-12 .NET?MemoryCache如何清除全部緩存_C#教程
- 2023-03-16 numpy如何獲取array中數組元素的索引位置_python
- 2023-05-19 python?txt中的文件,逐行讀取并且每行賦值給變量問題_python
- 2022-01-10 修改代碼后,刷新頁面沒有更新的解決辦法。Disable cache禁止
- 2022-02-25 Linux下臨時和永久修改主機名
- 2022-12-15 C#利用KPM算法解決字符串匹配問題詳解_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支