[Android] Matrixで画像を回転、フリップ、縮小させる

Android7 

画像を拡大、回転させたりするときは、Matrixを使います。ただし基本的に画像処理はパフォーマンス、メモリを使いますので多用することは避けましょう。


imageRotate0

1. ImageView

imageRotate1

2. Rotation

imageRotate2

3. Resize

imageRotate3b

4. Flip
Android Studio 2.2.2
Android 7.1.1


 

sponsored link

Matrix

 
最初に画像をdrawableに置きます。
 
drawable
 

kurumi.jpg

kurumi.jpg

  1. ImageView
    • リソース画像をBitmapで取り出します
  2. Rotation
    • setRotateで画像を回転させる
  3. Resize
    • preScaleで画像の拡大・縮小
  4. Flip
    • preScale(-1.0f, 1.0f)と符合を変えるとフリップできます
 

1. ImgeView

画像をImageViewにセットするためには

とすればできますが、画像をこの後 Mtrix に渡していくためにBitmapとして取り出します。

まとめてみると

MainActivity.java

activity_main.xml

 

 

2. Rotation (setRotate)

 

画像を90度回転させてみます。

px, pyを基点として回転させます。

Mtrixを使ってBitmapを再構築します。

MainActivity.java

レイアウトは同じです。

90°回転しました

imageRotate0
imageRotate1
 

3. Resize (preScale)

 

画像を縮小させてみます。ここでは prescale を使います

MainActivity.java

画像が縮小されました。

imageRotate0
imageRotate2
 

4. Flip (preScale)

 
ボタンの背景として画像を水平方向にフリップさせてみます。
Buttonの背景とする場合は、表示サイズを適正にしないといけませんので、縦横比率と実際の幅、それにスクリーン幅を求めて計算していきます。

フリップは縮小拡大と同じですが符号を変えます
preScale(-1.0f, 1.0f)
と設定するとできます
垂直方向は
preScale(1.0f, -1.0f)

MainActivity.java

activity_main.xml

 

水平方向にフリップしました

imageRotate0
imageRotate3b

 

関連:

Reference:
Matrix