android影像編輯和處理(二)
1.輸入矩陣:
Matrix矩陣類,當現有位元影像對象上進行繪製或從另一個位元影像對象建立某個位元影像時,可以使用該類。
Matrix矩陣類的每個數字都應用於映像上每個點的3個座標(x,y或z)之一:
如:1 , 0 , 0,
0, 1, 0,
0, 0, 1
第一行:指定x座標:x=1x+0y+0z;
第二行:指定y座標:y=0x+1y+oz;
第三行:指定z座標:z=0x+0y+1z;
Matrix matrix=new Matrix();matrix.setValues(new float[]{1,0.5f,0,0,1,0,0,0,1});canvas.drawBitmap(bmp, matrix, paint);copyPicture.setImageBitmap(alteredBitmap);在需要增加結果位元影像大小是可以設定:
alteredBitmap = Bitmap.createBitmap(bmp.getWidth()*2, bmp.getWidth(), bmp.getConfig());
2.Matrix類的方法
(1)旋轉:
Matrix matrix=new Matrix();
//matrix.setRotate(15);/*旋轉的角度,圍繞預設點(0,0),正數順時針旋轉,負數逆時針旋轉,預設點是映像左上方*/
matrix.setRotate(15, bmp.getWidth()/2,bmp.getHeight()/2);//中心旋轉
canvas.drawBitmap(bmp, matrix, paint);
(2)縮放:
matrix.setScale(1.5f, 1);//縮放,第一個參數x軸的縮放比例,第二個參數y軸的縮放比例。
(3)平移:
matrix.setTranslate(1.5f, -10);//平移,第一個參數x軸的移動數量,第二個參數y軸的移動數量。
(4)鏡像:
matrix.setScale(-1, 1);
matrix.postTranslate(bmp.getWidth(), 0);//向右移動
(5)翻轉:
matrix.setScale(1,-1);
matrix.postTranslate(0, bmp.getHeight());//向下移動
(6)繪製替代映像:
以前所使用的方法的缺點是映像會被截斷,因為沒有計算轉換後的結果大小。解決方案:當初次建立位元影像對象時,應用Matrix對象而不是繪製到一個空的位元影像對象中。
通過這種方式無需再獲得Canvas和Paint對象。缺點是不能再已變更位元圖對象。
在Bitmap類中存在一個靜態方法createBitmap.
Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, false);//參數不再說明。
樣本:
Matrix matrix=new Matrix();matrix.setRotate(15, bmp.getWidth()/2,bmp.getHeight()/2);//中心旋轉Bitmap alteredBitmap=Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, false);
copyPicture.setImageBitmap(alteredBitmap);