【QT技術應用】2D繪圖(2)

【QT技術應用】2D繪圖(2)

編輯:落鶴生 時間:2011-02-16 14:17 點擊:1468次
QPixmap QPixmap主要完成屏幕後臺 (off-screen)緩衝區繪圖。QPixmap對象可以使用QLabel或QAbstractButton子類 (QPushButton,QToolButton)顯示,QLabel通過設置pixmap屬性,QAbstractButton通過設置icon屬性 來完成,
收藏到: MSN - Live Favorites 添加到QQ書籤 百度收藏 CSDN技術網摘 添加到google 365Key網摘 新浪ViVi yahoo 收藏到收客網 Digbuzz我挖網 
TAG: Qt  繪圖  
 
QPixmap
QPixmap主要完成屏幕後臺 (off-screen)緩衝區繪圖。QPixmap對象可以使用QLabel或QAbstractButton子類 (QPushButton,QToolButton)顯示,QLabel通過設置pixmap屬性,QAbstractButton通過設置icon屬性 來完成,除了使用構造函數初始化,QPixmap對象還可以使用靜態函數grabWidget()和grabWindow()函數創建,並繪製指定的窗口 和窗口部件.QPixmap中的像素數據時內部的,並且由底層的窗口系統進行管理,如果要存取像素,只有通過QPrinter函數將QPixmap對戲那 個轉換爲QImage對象,根據底層系統的不同,QPixmap可以RGB32或者混合alpha格式存儲,如果圖像有Alpha通道且底層系統允許,則 優先使用混合alpha格式,因此QPixmap時依賴於底層系統的,在X11上和Mac上,QPixmap存儲在服務器端,QImage存儲在客戶點, 在windows上,這兩個類表達方式時相同的。QImage和QPixmap可以相互轉換,通常QImage載入圖像並進行直接操作,然後轉換爲 QPixmap在屏幕上顯示。如果不需要操作像素,就直接使用QPixmap.在windows上,QPixmap還可以與HBITMAP之間相互轉 換,QPixmap和QImage一樣使用隱式共享,也能夠使用數據流。

=========================================
組合模式繪圖
組 合模式(Composition Mode)用來指定如何合併源圖像和一個圖像,最常見的是SourceOver(通常也叫alpha混合),當原像素和目標像素以這種方式混合時,源圖像 的alpha通道定義了像素的透明度。組合模式繪圖只支持Format_ARGB32_Premultiplied和Format_ARGB32格格式, 而且應該優先使用Format_ARGB32_Premultiplied格式,設置了組合模式後,它對所有的繪圖操作都有效,如畫筆,畫刷,漸變效果和 pixmap/image繪製。QPainter::CompositeMode枚舉類型中前12中組合類型是T.Porter和T.Duff於1984 年在淪爲(Compositing Digital Image)中闡明的12種混合規則(Porter-Duff規則)混合的計算方法在此給出。以便理解混合的過程。
首先定義混合的因子 :
As:       原像素的alpha分量
Cs:       原像素種計算好(premultiplied)色彩分量
Ad:       目標像素的alpha分量
Cd;       目標像素計算好的色彩分量
Fs:       原像素在輸出結果種佔有的比例
Fd:       目標像素在輸出結果種佔有的比例
Ar:       輸出結果種的Alpha分量 
Cr:       輸出結果種計算好的色彩分量
Porter和Duff定義了選擇混合因子Fs和Fd產生不同的視覺效果的12種規則,最終結果種的Alpha值和色彩值由下面的公式決定
    Fs=f(Ad);
    Fd=f(As);
    Ar=AsxFs+AdxFd
    Cr=CsxFs+CdxFd
每種類型的Fs和Fd取值如表所示
------------------------------------------------------------------------------------------
             常 量                                             Fs        Fd              說明
QPainter::CompositionMode_SourceOver            1        1-As         默認模式,源alpha和目標像素混合
QPainter::CompositionMode_DestinationOver       1-Ad       1          和SourceOver相反,目標Alpha和源像素混合
QPainter::CompositionMode_Clear                 N/A       N/A         清除目標像素
QPainter::CompositionMode_Source                N/A       N/A         輸出源像素
QPainter::CompositionMode_SourceIn              Ad        0           在目標部分的源替代目標
QPainter::CompositionMode_DestinationI          0         As          於SourceIn相反
QPainter::CompositionMode_SourceOut             1-Ad      0           在目標之外的源替代目標
QPainter::CompositionMode_DestinationOut        0         1-As        於SourceOut相反
Qpainter::CompositionMode_SourceAtop            Ad        1-As        在目標部分的源和目標組合
QPainter::CompositionMode_DestinationAtop       1-Ad      As          與sourceatop相反
QPainter::CompositionMode_Xor                   1-Ad      1-As        在目標之外的源和源之外的目標混合
--------------------------------------------------------------------------------------------------------
注意,上面的說明並沒有完全概括各種混合的含義,要準確理解他們可以看公式並進行實踐,畜類上面12種Porter_Duff規則外,Qt還支持12種擴展混合模式。下面給出計算公式需要注意如果結果中alpha值和色彩值超過0-255的範圍,數值將會被截斷

1  QPainter::CompositionMode_Plus           源和目標相加,該操作實現動畫中兩幅圖像的溶解和過度過程。Cr=Cs+Cd   Ar=As+Ad
2  QPainter::CompositionMode_Multiply       源和目標進行正片疊底(multiply)操作。結果的顏色至少是源和目標種較暗的顏色。任何顏色和黑色作該操作產生黑色。任何顏色和白色作該操作將不會改變。Cr=CsxCd+Csx(1-Ad)+Cdx(1-As)  Ar=AsxAd+Asx(1-Ad)+Adx(1-As)=As+Ad-AsxAd
3  QPainter::CompositionMode_Screen         源和目標互補然後相乘結果的顏色至少是源和目標種較亮的顏色。任何顏色和黑色進行濾色操作不會改變,任何顏色和白色進行濾色操作還是白色
4  QPainter::CompositionMode_Overlay        根據目標顏色值不同,進行相乘操作或濾色操作,源色彩保持亮度和陰影覆蓋在目標上。目標顏色和源顏色混合以反應目標的亮度。
5  QPainter::CompositionMode_Darken         選擇源和目標種較暗的顏色
6  QPainter::CompositionMode_Lighten        選擇源和目標種較亮的顏色
7  QPainter::CompositoinMode_ColorDodge     加亮目標顏色以反應源顏色,繪製黑色將沒有效果
8  QPainter::CompositionMode_ColorBurn      使目標顏色變暗以反應源顏色,繪製白色沒有效果。
9  QPainter::CompositionMode_HardLight      根據源的顏色,決定是正片疊底還是濾色操作。如果源顏色高於0.5,目標顏色將變亮。即進行濾色操作。如果源顏色亮度值低於0.5,目標將會變暗,相當於進行了正片疊底操作。如果源亮度值等於0.5,目標不會改變,變亮或者變暗成都取決於源顏色和0.5的差,繪製純黑色和純白色結果還是純黑或純白。
10 QPainter::CompositionMode_SoftLight    根據源的顏色,決定進行變暗(darken)操作還是變亮(lighten)操作。如果源顏色比0.5亮,目標將變亮,即進行了濾色操作。如果源顏色比0.5暗,目標將變暗,相當於進行了顏色加深(burn)操作,如果等於0.5.目標不會發生改變。變亮或者變暗的程度取決於源顏色和0.5的差值。
11 QPainter::CompositionMode_Difference     源和目標種較暗的顏色減去較亮的顏色,繪製導致白色反轉成目標顏色黑色化
12 Qpainter::CompositionMode_Exclusion      和上一條規則的效果類似,但對比對較低一些,繪製白色將導致反轉成目標顏色,繪製黑色沒有


發佈了12 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章