Android Shader 顏色、映像渲染

來源:互聯網
上載者:User

標籤:android   shader   



Shader 

       Shader是一個基類,表示在繪製期間顏色的水平跨度

       它的子類被嵌入在Paint中使用,調用paint.setShader(shader)。

       除Bitmap外的其它對象,使用該Paint進行繪製時,將從shader中獲得顏色


Shader.TileMode 渲染模式

public enum TileMode {     CLAMP   (0),    REPEAT  (1),    MIRROR  (2);    TileMode(int nativeInt) {        this.nativeInt = nativeInt;    }    final int nativeInt;}
  CLAMP:如果超出原始bounds(即原圖的邊界),則重複邊緣上的color

  REPEAT:重複bitmap

  MIRROR:重複bitmap,與REPEAT不同的時,它是鏡像重複,即:反向重複


Shader 子類:   

   BitmapShader (android.graphics)  映像渲染
   ComposeShader (android.graphics)  組合渲染
   LinearGradient (android.graphics)  線性渲染
   RadialGradient (android.graphics)   環形渲染
   SweepGradient (android.graphics)  掃描渲染


BitmapShader

   new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.MIRROR); 以某個渲染模式 進行 映像渲染


ComposeShader

   new ComposeShader(shaderA, shaderB, PorterDuff.Mode.DST); 組合兩種渲染效果,以PorterDuff.Mode進行組合


LinearGradient

  new LinearGradient(0, 0, bitmap.getWidth(), bitmap.getHeight(), 0x470000ff,0xefffff00, Shader.TileMode.CLAMP); 

      在一定地區內,以某種渲染模式,進行兩種顏色間的線性變化

  new LinearGradient(0, 0, bitmap.getWidth(), bitmap.getHeight(), new int[]{0xffabc777, 0x2300ff00, 0x470000ff, 0xefffff00}, new float[]{0.1f, 0.3f, 0.5f, 1.0f}, Shader.TileMode.CLAMP);

     在一定地區內,以某種渲染模式,進行一組顏色間的線性變化,變化的位置由float數組決定。要求int數組和float數組,長度一致

  

RadialGradient

   以點(x,y),半徑為r,進行環形渲染

   new RadialGradient(w/2, h/2, Math.min(w, h) /2, 0xddff00f0, 0xffabc777, Shader.TileMode.REPEAT);

   new RadialGradient(w/2, h/2, Math.min(w, h) /2, new int[]{0xddff0000, 0x2300ff00, 0x470000ff, 0xffabc777}, new float[]{0.1f, 0.3f, 0.5f, 1.0f}, Shader.TileMode.CLAMP);


SweepGradient

  以點(x,y),進行掃描渲染 

   new SweepGradient(w/2, h/2, 0xddff00f0, 0xffabc777);

   new SweepGradient(w, h, new int[]{0xffff0000, 0xff00ff00, 0xff0000ff, 0xffabc777, 0xffee00ee}, new float[]{0.2f, 0.4f, 0.6f, 0.75f, 1f});


PorterDuff.Mode


canvas.drawBitmap(mDstB, 0, 0, paint);//先繪製目標paint.setXfermode(sModes[i]);// 使用modecanvas.drawBitmap(mSrcB, 0, 0, paint);//再繪製源paint.setXfermode(null);//清除mode

  

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Android Shader 顏色、映像渲染

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.