ページ

2013/12/07

[Android]android.graphics.Matrix の set, pre, post メソッドの違い

画像を色々変換しようと思って Matrix クラスを使ってみたら、
Rotate, Scale, Skew, Translate のメソッドにそれぞれ set, pre, post メソッドがあって
どういうことだろうと思ったら以下のサイトを見て解決した。
android.graphics.Matrixの動作 - あおいろ日記
Matrix は行列だし、行列は Matrix だった。
行列といえば掛ける順番で結果が変わるのだから
pre, post 系メソッドは前から掛けるか、後ろから掛けるかの違いで、
set 系メソッドは行列の初期化ということだった。

これだけだとアレなので行う変換の順番によって結果が異なるという例を上げておこうと思う。

回転してから移動


動くかどうかは試してないけどコードで書くならこんな感じ?
Matrix matrix = new Matrix();
matrix.postRotate(90);
matrix.postTranslate(100, 0);

移動してから回転


動くかどうかは試してないけどコードで書くならこんな感じ?
Matrix matrix = new Matrix();
matrix.postRotate(90);
matrix.preTranslate(100, 0);
下のような感じでもいいのかもしれないけど、
回転してから移動と処理順を合わせて条件によって Translate の pre, post 切り替える方が賢いと思う。
Matrix matrix = new Matrix();
matrix.postTranslate(100, 0);
matrix.postRotate(90);