日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android Matrix图片变换处理

發布時間:2024/4/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android Matrix图片变换处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天,講講android 

Matrix圖片變換處理的內容。


Matrix

  對于一個圖片變換的處理,需要Matrix類的支持,它位于"android.graphics.Matrix"包下,是Android提供的一個矩陣工具類,它本身不能對圖像或View進行變換,但它可與其他API結合來控制圖形、View的變換,如Canvas。

  Matrix提供了一些方法來控制圖片變換:

  • setTranslate(float dx,float dy):控制Matrix進行位移。
  • setSkew(float kx,float ky):控制Matrix進行傾斜,kx、ky為X、Y方向上的比例。
  • setSkew(float kx,float ky,float px,float py):控制Matrix以px、py為軸心進行傾斜,kx、ky為X、Y方向上的傾斜比例。
  • setRotate(float degrees):控制Matrix進行depress角度的旋轉,軸心為(0,0)。
  • setRotate(float degrees,float px,float py):控制Matrix進行depress角度的旋轉,軸心為(px,py)。
  • setScale(float sx,float sy):設置Matrix進行縮放,sx、sy為X、Y方向上的縮放比例。
  • setScale(float sx,float sy,float px,float py):設置Matrix以(px,py)為軸心進行縮放,sx、sy為X、Y方向上的縮放比例。

  之前有提過,圖片在內存中存放的就是一個一個的像素點,而對于圖片的變換主要是處理圖片的每個像素點,對每個像素點進行相應的變換,即可完成對圖像的變換。上面已經列舉了Matrix進行變換的常用方法,下面以幾個Demo來講解一下如何通過Matrix進行變換。?


Matrix縮放

/*** 縮放圖片*/protected void bitmapScale(float x, float y) {// 因為要將圖片放大,所以要根據放大的尺寸重新創建BitmapBitmap afterBitmap = Bitmap.createBitmap((int) (baseBitmap.getWidth() * x),(int) (baseBitmap.getHeight() * y), baseBitmap.getConfig());Canvas canvas = new Canvas(afterBitmap);// 初始化Matrix對象Matrix matrix = new Matrix();// 根據傳入的參數設置縮放比例matrix.setScale(x, y);// 根據縮放比例,把圖片draw到Canvas上canvas.drawBitmap(baseBitmap, matrix,paint);iv_after.setImageBitmap(afterBitmap);}


效果展示:

?

Matrix旋轉

  代碼:

/*** 圖片旋轉*/protected void bitmapRotate(float degrees) {// 創建一個和原圖一樣大小的圖片Bitmap afterBitmap = Bitmap.createBitmap(baseBitmap.getWidth(),baseBitmap.getHeight(), baseBitmap.getConfig());Canvas canvas = new Canvas(afterBitmap);Matrix matrix = new Matrix();// 根據原圖的中心位置旋轉matrix.setRotate(degrees, baseBitmap.getWidth() / 2,baseBitmap.getHeight() / 2);canvas.drawBitmap(baseBitmap, matrix, paint);iv_after.setImageBitmap(afterBitmap);}


 效果展示:

?

Matrix位移

  代碼:

/*** 圖片移動*/protected void bitmapTranslate(float dx, float dy) {// 需要根據移動的距離來創建圖片的拷貝圖大小Bitmap afterBitmap = Bitmap.createBitmap((int) (baseBitmap.getWidth() + dx),(int) (baseBitmap.getHeight() + dy), baseBitmap.getConfig());Canvas canvas = new Canvas(afterBitmap);Matrix matrix = new Matrix();// 設置移動的距離matrix.setTranslate(dx, dy);canvas.drawBitmap(baseBitmap, matrix, paint);iv_after.setImageBitmap(afterBitmap);}

 效果展示:

?

Matrix傾斜

  代碼:

/*** 傾斜圖片*/protected void bitmapSkew(float dx, float dy) {// 根據圖片的傾斜比例,計算變換后圖片的大小,Bitmap afterBitmap = Bitmap.createBitmap(baseBitmap.getWidth()+ (int) (baseBitmap.getWidth() * dx), baseBitmap.getHeight()+ (int) (baseBitmap.getHeight() * dy), baseBitmap.getConfig());Canvas canvas = new Canvas(afterBitmap);Matrix matrix = new Matrix();// 設置圖片傾斜的比例matrix.setSkew(dx, dy);canvas.drawBitmap(baseBitmap, matrix, paint);iv_after.setImageBitmap(afterBitmap);}



Matrix變換注意事項

  上面幾個小方法演示了如何使用Matrix進行變換,但是還有幾點需要額外注意一下:

  • 對于一個從BitmapFactory.decodeXxx()方法加載的Bitmap對象而言,它是一個只讀的,無法對其進行處理,必須使用Bitmap.createBitmap()方法重新創建一個Bitmap對象的拷貝,才可以對拷貝的Bitmap進行處理。
  • 因為圖像的變換是針對每一個像素點的,所以有些變換可能發生像素點的丟失,這里需要使用Paint.setAnitiAlias(boolean)設置來消除鋸齒,這樣圖片變換后的效果會好很多。
  • 在重新創建一個Bitmap對象的拷貝的時候,需要注意它的寬高,如果設置不妥,很可能變換后的像素點已經移動到"圖片之外"去了。

android Matrix圖片變換處理 就講完了。


就這么簡單。

總結

以上是生活随笔為你收集整理的android Matrix图片变换处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。