Android 顏色渲染PorterDuff及Xfermode詳解

Android 顏色渲染  PorterDuff及Xfermode詳解

    之前已經講過了除ComposeShader之外Shader的全部子類, 在講ComposeShader(組合渲染)之前,  由於構造ComposeShader需要 PorterDuffXfermode或者PorterDuff.Mode作爲參數,所以在此先詳細地瞭解下這兩個類的作用,這對之後的繪圖會有很大的幫助:

在講具體的使用之前補充一點知識,這就是 ProterDuff的由來:

相信大多數人看到這個ProterDuff單詞很奇怪了吧,這腫麼個意思呢,然後就用有道啊,金山啊開始翻譯,但是翻譯軟件給出的結果肯定還是  ProterDuff或者"未找到".

這是神馬情況呢?因爲ProterDuff是兩個人名的組合: Tomas Proter和 Tom Duff. 他們是最早在SIGGRAPH上提出圖形混合概念的大神級人物.有興趣的童靴們可以自己查下並深入瞭解,在此不再做過多描述.


   利用ProterBuff.Mode我們可以完成任意2D圖像測操作, 比如塗鴉畫板應用中的橡皮擦效果,繪製各種自定義的進度,等等很強大的效果,下面請看具體的介紹:

    1.  Xfermode:

 

  

Xfermode有三個子類 :

AvoidXfermode  指定了一個顏色和容差,強制Paint避免在它上面繪圖(或者只在它上面繪圖)。

PixelXorXfermode  當覆蓋已有的顏色時,應用一個簡單的像素異或操作。

PorterDuffXfermode  這是一個非常強大的轉換模式,使用它,可以使用圖像合成的16條Porter-Duff規則的任意一條來控制Paint如何與已有的Canvas圖像進行交互。

要應用轉換模式,可以使用setXferMode方法,如下所示:

[java] view plain copy
  1. AvoidXfermode avoid = new AvoidXfermode(Color.BLUE, 10, AvoidXfermode.Mode. AVOID);    borderPen.setXfermode(avoid);  

2.PorterDuff:



首先看一下效果圖(來自ApiDemos/Graphics/XferModes)

                                                                                   



從上面我們可以看到PorterDuff.Mode爲枚舉類,一共有16個枚舉值:

1.PorterDuff.Mode.CLEAR  

  所繪製不會提交到畫布上。
2.PorterDuff.Mode.SRC

   顯示上層繪製圖片
3.PorterDuff.Mode.DST

  顯示下層繪製圖片
4.PorterDuff.Mode.SRC_OVER

  正常繪製顯示,上下層繪製疊蓋。
5.PorterDuff.Mode.DST_OVER

  上下層都顯示。下層居上顯示。
6.PorterDuff.Mode.SRC_IN

   取兩層繪製交集。顯示上層。
7.PorterDuff.Mode.DST_IN

  取兩層繪製交集。顯示下層。
8.PorterDuff.Mode.SRC_OUT

 取上層繪製非交集部分。
9.PorterDuff.Mode.DST_OUT

 取下層繪製非交集部分。
10.PorterDuff.Mode.SRC_ATOP

 取下層非交集部分與上層交集部分
11.PorterDuff.Mode.DST_ATOP

 取上層非交集部分與下層交集部分
12.PorterDuff.Mode.XOR

  異或:去除兩圖層交集部分
13.PorterDuff.Mode.DARKEN

  取兩圖層全部區域,交集部分顏色加深
14.PorterDuff.Mode.LIGHTEN

  取兩圖層全部,點亮交集部分顏色
15.PorterDuff.Mode.MULTIPLY

  取兩圖層交集部分疊加後顏色
16.PorterDuff.Mode.SCREEN

  取兩圖層全部區域,交集部分變爲透明色


保存一下 

原文地址:

http://blog.csdn.net/t12x3456/article/details/10432935


我是代碼搬運工

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