Android的矩陣(一):ColorMatrix

來源:互聯網
上載者:User

標籤:

    最近的學習過程中看到關於android色彩矩陣的內容,以前看到這部分內容,基本都是跳過的,沒有認真細讀。

    自己給自己找的借口是:

      1,大一學的矩陣內容早就忘的乾乾淨淨了,當時學的時候就很煩人,所以現在也乾脆跳過別看吧,反正自己目前又不沒有做影像處理之類的任務。

      2,Android中色彩方面,有現成的setSaturation—設定飽和度,setScale—色彩縮放,setRotate—色彩旋轉方法了,沒必要去學ColorMatrix吧。

                               

                

    當然,後來還是對這種借口進行了反思,不能一直逃避矩陣有關的內容吧,於是掏出大一的《線性代數》,翻了翻矩陣的相關知識。  

    以下總結的矩陣的一些簡單知識,並不深入,但是屬於一個開發人員應該掌握的程度。

 

    一:矩陣的來源: 我們都知道矩陣的形式

       

 

    但是矩陣的來源是什麼呢,其實矩陣最早來自於方程組的係數及常數所構成的方陣。

    比如:

      

    對應的矩陣陣列:

      

    

    這個矩陣陣列有什麼用呢?不要小看了這個矩陣,這裡矩陣決定著這個方程組是否有解,以及如果有    解,解是什麼。 
              也就是說利用矩陣可以對線性方程組進行方便快速地求解。

 

    二:矩陣的運算

    矩陣的加法:

    

    矩陣的乘法:

    

    加法運算條件必須是同型矩陣,乘法條件是Am×n矩陣,Bn×p矩陣。

    

    瞭解了這些基本的矩陣概念,再來看Android中的ColorMatrix。

    大家都知道在Android圖片中採用ARGB來表示顏色,圖片中每一個點都有自己的RGBA值,將這個RGBA值  當成只有一列的矩陣,讓這個矩陣

    乘上另外一個矩陣得到變化,以改變圖片顏色,這裡的另一個矩陣就是ColorMatrix。

    首先,根據矩陣乘法,我們覺得一個4*4的ColorMatrix就可以了,

    比如:

          

    但是問什麼最後ColorMatrix用了4*5的矩陣。原因看圖:

    

 

   

    e,j,o,t是沒有係數的,當我們想增加某一個屬性而不影響其他時,只需要修改e,j,o,t的值。

    

    基本用法:  

        ColorMatrix colorMatrix = new ColorMatrix(new float[]{                  1, 0, 0, 0, 0,                  0, 1, 0, 0, 0,                  0, 0, 1, 0, 0,                  0, 0, 0, 1, 0,          });          mPaint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));    

     

    實戰演練:

      1,我們想實現去除藍色的效果

         只要設定ColorMatrix為   

        ColorMatrix colorMatrix = new ColorMatrix(new float[]{                  1, 0, 0, 0, 0,                  0, 1, 0, 0, 0,                  0, 0, 0, 0, 0,                  0, 0, 0, 1, 0,          }); 

     這樣原來圖片的RGBA的那個矩陣和colorMatrix相乘得到的結果是RG0A,沒有B了。

    效果我們這裡使用了一個《android群英傳》裡一個關於ColorMatrix學習的小工具:

    https://github.com/xurui1995/ColorMatrixStudy

    關鍵代碼:   

    // 將矩陣值設定到映像    private void setImageMatrix() {        Bitmap bmp = Bitmap.createBitmap(                bitmap.getWidth(),                bitmap.getHeight(),                Bitmap.Config.ARGB_8888);        android.graphics.ColorMatrix colorMatrix =                new android.graphics.ColorMatrix();        colorMatrix.set(mColorMatrix);        Canvas canvas = new Canvas(bmp);        Paint paint = new Paint();        paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));        canvas.drawBitmap(bitmap, 0, 0, paint);        mImageView.setImageBitmap(bmp);    }

     效果:

        

    這時候你肯定想:臥槽,怎麼這麼黃?沒關係,給你看一張圖你就馬上懂了。

 

    

    

    2,根據ColorMatrix回答變化效果

        

     答案顯而易見:第一個效果是綠色加強一倍。第二個效果是增強紅和綠各100分量。

 

    3,一些其他"特效",你可以嘗試更多。

            

                        

      

     

  

      

      

    

    

 

  

Android的矩陣(一):ColorMatrix

聯繫我們

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