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

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

Android Studio
2021.3.1




Matrix

 
画像を拡大縮小させて表示する方法としてはImageViewのレイアウトを使うことで可能です。

https://akira-watson.com/android/imageview2.html

Matrixを使って画像そのものを拡大縮小、あるいは回転、フリップさせてしまう方法もあります。
 
1x1.trans - [Android] MatrixでImageView画像を回転、フリップ、拡大縮小させる


 
目次
1. ImageView
  リソース画像をBitmapで取り出します
2. Rotation
  setRotateで画像を回転させる
3. Resize
  preScaleで画像の拡大縮小
4. Flip
  preScaleの符合を変えてフリップ
5. サンプルコード
 

ImgeView

 

最初に画像をdrawableに置きます。これを回転、リサイズ、フリップさせていきます。
 

1x1.trans - [Android] MatrixでImageView画像を回転、フリップ、拡大縮小させる

kurumi.jpg

 

あるいは \res\mipmap 以下にあるDroid君のアイコン画像をコピーして代用もできます。
1x1.trans - [Android] MatrixでImageView画像を回転、フリップ、拡大縮小させる

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


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


まとめてみると

 

Rotation (setRotate)

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


 
px, pyを基点として回転させます。
 
Mtrixを使ってBitmapを再構築します。


 
MainActivity.java


 
 
90°回転しました
 
1x1.trans - [Android] MatrixでImageView画像を回転、フリップ、拡大縮小させる

 

Resize (preScale)

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


MainActivity.java


 
画像が縮小されました。
 
1x1.trans - [Android] MatrixでImageView画像を回転、フリップ、拡大縮小させる

 

Flip (preScale)

 
ボタンの背景として画像を水平方向にフリップさせてみます。
Buttonの背景とする場合は、表示サイズを適正にしないといけませんので、縦横比率と実際の幅、それにスクリーン幅を求めて計算していきます。
 
フリップは拡大縮小と同じですが符号を変えます
preScale(-1.0f, 1.0f)
と設定すると水平方向でのフリップです。
垂直方向は
preScale(1.0f, -1.0f)
 
MainActivity.java


 
水平方向にフリップしました
 
1x1.trans - [Android] MatrixでImageView画像を回転、フリップ、拡大縮小させる

 

サンプルコード

 
以上をまとめてボタンで機能を確認してみます。

MainActivity.java


 

activity_main.xml


 
strings.xml

 
これで実行させてみましょう。
 

 
 
関連:

Reference:
Matrix

シェアする

  • このエントリーをはてなブックマークに追加

フォローする