Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中的Matrix類與ColorMatrix類

Android中的Matrix類與ColorMatrix類

編輯:關於Android編程

1.Matrix.

Android API中有一個Matirx類,當在現有位圖對象上進行繪制或從另一個位圖對象創建某個位圖對象時,可以使用該類。這個類可以讓我們對位圖進行旋轉、裁剪、縮放、平移等操作。

Matrix類是以9個float型數字的一維數組表示的。每個數字都對應於圖像上每個點的3個坐標(x,y或z)之一。


[java]
Matrix matrix = new Matrix(); 
matrix.setValues(new float[] {  
1, 0, 0,  
0, 1, 0, 
0, 0, 1 }); 

Matrix matrix = new Matrix();
matrix.setValues(new float[] {
1, 0, 0,
0, 1, 0,
0, 0, 1 });
頂行(1,0,0)指定源圖像的x坐標將根據以下公式轉換:x=1*x+0*y+0*z。即頂行總會影響到目標圖像的x坐標,但可以操作源圖像的x,y,z坐標。

同理,第二行和第三行將影響目標圖像的y和z坐標。

Matrix類有以下成員方法:

setRotate(), setScale(), setTranslate(), 而這幾種方法還有個字之前之後的版本(preScale(), postRotate(), postTranslate()...),這使得我們可以每次按順序完成一個以上的轉換。

2.ColorMatrix

類似於在Canvas對象上繪制時使用Matrix對象的方法,也可以使用一個ColorMatrix對象來改變用於在Canvas對象上繪制的Paint對象。

同樣,ColorMatrix也是一個浮點數數組,可以對圖像的像素進行操作。然後不同於操作x, y和z坐標,它操作的是顏色值——每個像素的RGBA值。

ColorMatrix的使用方式:

 

[java]
ColorMatrix cm = new ColorMatrix(); 
paint.setColorFilter(new ColorMatrixColorFilter(cm)); 

ColorMatrix cm = new ColorMatrix();
paint.setColorFilter(new ColorMatrixColorFilter(cm));即構建一個ColorMatrixColorFilter對象,並將它應用於Paint對象,從而使得ColorMatrix對象可以用來改變Canvas對象上的繪制內容。

如上默認的ColorMatrix是不會改變圖像的,因為它形如:

1,0,0,0,0

0,1,0,0,0

0,0,1,0,0

0,0,0,1,0

第一行包含了在單個像素的紅色部分上發生的操作,第二行影響綠色部分,第三行影響藍色部分,最後一行操作的是Alpha值。

而與每行相乘的數字中,第一個數字是與像素的紅色值相關聯的乘數,第二個是綠色相關聯,第三個是藍色相關聯,第四個是與Alpha相關聯,而最後一個數字不與任何值相乘。

例如,如果想改變圖像的對比度和亮度可以這樣操作:

[java]
ColorMatrix cm = new ColorMatrix(); 
int contrast=2; 
int brightness=-25; 
cm.set(new float[] {  
  contrast, 0, 0, 0, brightness,  
  0, contrast, 0, 0, brightness,  
  0, 0, contrast, 0, brightness, 
  0, 0, 0, 1, 0 }); 
//cm.setSaturation(.5f);//改變飽和度  
paint.setColorFilter(new ColorMatrixColorFilter(cm)); 

ColorMatrix cm = new ColorMatrix();
int contrast=2;
int brightness=-25;
cm.set(new float[] {
  contrast, 0, 0, 0, brightness,
  0, contrast, 0, 0, brightness,
  0, 0, contrast, 0, brightness,
  0, 0, 0, 1, 0 });
//cm.setSaturation(.5f);//改變飽和度
paint.setColorFilter(new ColorMatrixColorFilter(cm));

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved