Android 顏色渲染(九) PorterDuff及Xfermode詳解

來源:互聯網
上載者:User

標籤:des   android   blog   http   color   os   ar   使用   java   

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 plaincopy 
  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

  取兩圖層全部地區,交集部分變為透明色

 

Android 顏色渲染(九) PorterDuff及Xfermode詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.