1. 程式人生 > >Android矩陣原理詳解(Matrix,ColorMatrix)

Android矩陣原理詳解(Matrix,ColorMatrix)

在程式設計中有時候需要對圖片做特殊的處理,比如將圖片做出黑白的,或者老照片的效果,有時候還要對圖片進行變換,以拉伸,扭曲等等。

這些效果在android中有很好的支援,通過顏色矩陣(ColorMatrix)和座標變換矩陣(Matrix)可以完美的做出上面的所說的效果。

下面將分別介紹這兩個矩陣的用法和相關的函式。

顏色矩陣
android中可以通過顏色矩陣(ColorMatrix類)方面的操作顏色,顏色矩陣是一個5x4 的矩陣(如圖1.1)

可以用來方面的修改圖片中RGBA各分量的值,顏色矩陣以一維陣列的方式儲存如下:
 [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ]
他通過RGBA四個通道來直接操作對應顏色,如果會使用Photoshop就會知道有時處理圖片通過控制RGBA各顏色通道來做出特殊的效果。

這個矩陣對顏色的作用計算方式如1.3示:


矩陣的運算規則是矩陣A的一行乘以矩陣C的一列作為矩陣R的一行,

C矩陣是圖片中包含的ARGB資訊,R矩陣是用顏色矩陣應用於C之後的新的顏色分量,運算結果如下:
 
R' = a*R + b*G + c*B + d*A + e;
G' = f*R + g*G + h*B + i*A + j;
B' = k*R + l*G + m*B + n*A + o;
A' = p*R + q*G + r*B + s*A + t;
 
顏色矩陣並不是看上去那麼深奧,其實需要使用的引數很少,而且很有規律第一行決定紅色第二行決定綠色

第三行決定藍色,第四行決定了透明度,第五列是顏色的偏移量。下面是一個實際中使用的顏色矩陣。


如果把這個矩陣作用於各顏色分量的話,R=A*C,計算後會發現,各個顏色分量實際上沒有任何的改變(R'=R G'=G B'=B A'=A)。

圖1.5所示矩陣計算後會發現紅色分量增加100,綠色分量增加100,

這樣的效果就是圖片偏黃,因為紅色和綠色混合後得到黃色,黃色增加了100,圖片當然就偏黃了。

改變各顏色分量不僅可以通過修改第5列的顏色偏移量也可如上面矩陣所示將對應的顏色值乘以一個倍數,直接放大。

上圖1.6是將綠色分量乘以2變為原來的2倍。相信讀者至此已經明白瞭如何通過顏色矩陣來改變各顏色分量。

下面編寫一段程式碼來,通過調整顏色矩陣來獲得不同的顏色效果,JavaCode如下:

  1. CMatrix類:    
  2.   publicclass CMatrix extends Activity {    
  3.      private Button change;    
  4.      private EditText [] et=new EditText[20];    
  5.      privatefloat []carray=newfloat[20];    
  6.      private MyImage sv;    
  7.      @Override
  8.      publicvoid onCreate(Bundle savedInstanceState) {    
  9.          super.onCreate(savedInstanceState);    
  10.          setContentView(R.layout.main);    
  11.         change=(Button)findViewById(R.id.set);    
  12.         sv=(MyImage)findViewById(R.id.MyImage);    
  13.         for(int i=0;i<20;i++){    
  14.         et[i]=(EditText)findViewById(R.id.indexa+i);    
  15.         carray[i]=Float.valueOf(et[i].getText().toString());    
  16.         }    
  17.         change.setOnClickListener(l);    
  18.      }    
  19.      private Button.OnClickListener l=new Button.OnClickListener(){    
  20.         @Override
  21.         publicvoid onClick(View arg0) {    
  22.             // TODO Auto-generated method stub  
  23.              getValues();    
  24.             sv.setValues(carray);    
  25.             sv.invalidate();    
  26.         }    
  27.      };    
  28.      publicvoid getValues(){    
  29.          for(int i=0;i<20;i++){    
  30.              carray[i]=Float.valueOf(et[i].getText().toString());    
  31.          }    
  32. 相關推薦

    Android矩陣原理Matrix,ColorMatrix

    在程式設計中有時候需要對圖片做特殊的處理,比如將圖片做出黑白的,或者老照片的效果,有時候還要對圖片進行變換,以拉伸,扭曲等等。 這些效果在android中有很好的支援,通過顏色矩陣(ColorMatrix)和座標變換矩陣(Matrix)可以完美的做出上面的所說的

    DPMDeformable Part Model原理匯總

    特征向量 成就 算法思想 filter people tell 梯度 錨點 精度 寫在前面: DPM(Deformable Part Model),正如其名稱所述,可變形的組件模型,是一種基於組件的檢測算法,其所見即其意。該模型由大神Felzenszwalb在2008年提

    正則表示式的執行原理NFA引擎

    正則表示式 NFA 引擎是大多主流語言使用的引擎,它以表示式為主導,更符合開發的邏輯。 理解 NFA 引擎的執行規則,是十分重要的。 我們先看一個例子: 比如下邊的這行字串 The dragging belly indicates your cat

    影象處理中的數學原理Part1 總綱

    數字影象處理技術的研究與開發對數學基礎的要求很高,一些不斷湧現的新方法中,眼花繚亂的數學推導令很多期待深入研究的人望而卻步。一個正規理工科學生大致已經具備了包括微積分、線性代數、概率論在內的數學基礎。但

    Android Mvp模式Kotlin篇

    mvp簡介與Mvc對比: 相信大家對MVC都是比較熟悉了:M-Model-模型、V-View-檢視、C-Controller-控制器,MVP作為MVC的演化版本,那麼類似的MVP所對應的意義:M-Mo

    android Json解析詳細程式碼

    廣告時間:張大媽  好看美劇  妹子圖  JSON的定義:        一種輕量級的資料交換格式,具有良好的可讀和便於快速編寫的特性。業內主流技術為其提供了完整的解決方案(有點類似於正則表示式 ,獲得了當今大部分語言的支援),從而可以在不同平臺間進行資料交換。JSON採

    Android熱修復技術原理最新最全版本

    總結 核心 桌面圖標 實時 開源 穩定性 安卓 定義 check 本文框架 什麽是熱修復? 熱修復框架分類 技術原理及特點 Tinker框架解析 各框架對比圖 總結 ??通過閱讀本文,你會對熱修復技術有更深的認知,本文會列出各類框架的優缺點以及技術原理,文章末尾簡單描述

    基於概率的矩陣分解原理PMF

    上一篇部落格講到了推薦系統中常用的矩陣分解方法,RegularizedMF是對BasicMF的優化,而PMF是在RegularizedMF的基礎上,引入概率模型進一步優化。假設使用者U和專案V的特徵矩陣均服從高斯分佈,通過評分矩陣已知值得到U和V的特徵矩陣,然後

    GLSL矩陣變換三、view matrix和projection matrix

    我們在前一篇部落格GLSL矩陣變換詳解(二、旋轉變換、平移變換以及QMatrix4x4)的基礎上再增加對攝像機位置、姿態的設定功能,以及成像區域的定義功能。QMatrix4x4::lookAt(camera, center, upDirection)定義了攝像機的位置與姿態,

    主成分分析PCA原理轉載

    增加 信息 什麽 之前 repl 神奇 cto gmail 協方差 一、PCA簡介 1. 相關背景 上完陳恩紅老師的《機器學習與知識發現》和季海波老師的《矩陣代數》兩門課之後,頗有體會。最近在做主成分分析和奇異值分解方面的項目,所以記錄一下心得體會。

    css-浮動與清除浮動的原理清除浮動的原理你知道嗎

    alt col ges mage all strong splay height http float元素A的特點: 脫離文檔流 靠向left或right float元素會和塊盒子重疊 準確來說,是塊盒子和A重疊,但塊盒子內容會浮動在A周圍 不會和inline元素重

    php文件上傳原理含源碼

    輸入數據 最大值 cut 產生 har 默認值 接受 上傳文件 tle 1、文件上傳原理   將客戶端的文件上傳到服務器,再將服務器的臨時文件上傳到指定目錄 2、客戶端配置 提交表單 表單的發送方式為post 添加enctype="multipart/form-data"

    編碼原理----簡介

    傳輸 冗余 shadow 溫習 自己 ext 區域 興趣 圖片 本節開始,給大家系列介紹一下關於編碼原理的相關知識,可能會涉及到部分算法的知識,也就意味著會相對枯燥一些,筆者盡自己所能,努力的追求簡單,同時把原理清晰的呈現給大家。 一、編碼 編碼已經是一個老聲長談的

    編碼原理---變換編碼

    mar 關於 詳解 tex 描述 原理 學習 編碼原理 watermark 本篇介紹編碼原理中的變換編碼。 一、變換的目的和作用: 變換編碼的作用是將空間域描述的圖像信號變換到頻率域,然後對變換後的系數進行編碼處理。一般來說,圖像在空間上具有較強的相關性,變換到頻率

    編碼原理---量化

    進一步 mark 新的 dct 說明 一點 註意 cto water 本節開始介紹編碼過程中的量化環節。還記得上一篇的變換嗎?變換之後得到了一個新的矩陣,一個經過從空域變換到頻域的一個矩陣。那麽,量化呢,就是基於變換後得到的矩陣,再做進一步的處理,本質也就是進一步的壓縮。

    編碼原理---之字形掃描

    便是 集中 img 詳解 工作 -- 漢字 如何 編碼原理 上一篇我們講到,經過量化後得到了諸多零值和整數值,本篇接下來講講編碼過程中過對這些值如何組織和處理,那就是ZigZag掃描嘍。 一、簡介 ZigZag掃描也稱作之字形掃描,何以得此稱謂,是因為其掃描的路徑特

    LVS原理3種工作方式8種調度算法--老男孩

    工作流程圖 nfs服務器 靈活 做成 靈活性 www. 24小時 必須 其他 一、LVS原理詳解(4種工作方式8種調度算法) 集群簡介 集群就是一組獨立的計算機,協同工作,對外提供服務。對客戶端來說像是一臺服務器提供服務。 LVS在企業架構中的位置:

    heartbeat高可用原理

    heartbeat linux 1.heartbeat的作用 通過heartbeat,可以將資源(IP及程序服務等資源)從一臺已經故障的計算機快速轉移到另一臺正常運轉的機器上繼續提供服務,一般稱之為高可用服務。在實際生產中mkeepalived有很多相同之處。在生產實際的業務應用也是有區別的

    JAVA線程池原理1

    err 最大 RKE private queue 分享 ren ++ ant 線程池的優點 1、線程是稀缺資源,使用線程池可以減少創建和銷毀線程的次數,每個工作線程都可以重復使用。 2、可以根據系統的承受能力,調整線程池中工作線程的數量,防止因為消耗過多內存導致服務器崩潰。

    大型企業網絡構建——OSPF路由原理

    ospf**OSPF的基本概念:** OSPF區域:為了適應大型網絡,OSPF在AS內劃分多個區域, 每個OSPF 路由器只維護所在區域的完整鏈路狀態信息。 區域ID:可以表示成一個十進制的數字,也可以表示成一個IP。 骨幹區域的Area 0:負