Androidが開発したMatrix画像処理類の使用
1931 ワード
Androidでは、画像の処理にはMatrixクラスが必要です.Matrixは3 x 3のマトリクスで、画像の処理には4つの基本的なタイプがあります.
1、Translate————平行移動変換
2、Scale————スケーリング変換
3、Rotate————回転変換
4、Skew————ミスカット変換
AndroidのAPIでは、set(Matrixの値を設定するために使用される)、post(後乗、マトリクスの原理に基づいて左乗に相当)、pre(先乗、マトリクスの右乗に相当)の3つの操作方式が提供されています.既定では、この4つの変換はすべて(0,0)点を中心に変換されます.もちろん、中心点を中心にした中心点をカスタマイズできます.
まず、シフトについて言えば、画像処理の過程で最もよく使われるのは、setTranslate()であり、シフトはx軸とy軸で画像を簡単に移動することを意味する.setTranslate法は2つの浮動小数点数をパラメータとして用い,各軸上を移動する数を表す.1番目のパラメータは、画像がx軸上に移動する数であり、2番目のパラメータは、画像がy軸上に移動する数である.x軸で正の値を使用してパンすると画像が右に移動し、負の値を使用して画像が左に移動します.y軸で正の値を使用してパンすると画像が下に移動し、負の値を使用して画像が上に移動します.
さらにスケールを見ると、Matrixクラスのもう一つの有用な方法はsetScaleメソッドです.パラメータとして2つの浮動小数点数を使用し、各軸で発生したスケール量を表します.1番目のパラメータはx軸のスケーリングであり、2番目のパラメータはy軸のスケーリングです.例:matrix.setScale(1.5f,1);複雑なのは画像の回転で、内蔵の方法の一つはsetRotate方法です.回転の角度を表す浮動小数点数を使用します.既定の点(0,0)を中心に正の数が時計回りに回転し、負の数が画像を反時計回りに回転します.既定の点は画像の左上隅です.たとえば、次のようになります.
また、setRotateメソッドをパラメータとして回転の角度や周囲の回転点を使用して呼び出すこともできます.画像の中心点を回転点として選択します.たとえば、次のようにします.
正接変換の場合、数学的にはShear mappingまたはTransvectionとも呼ばれ、比較的特殊な線形変換である.正接変換の効果は、すべての点のx座標(またはy座標)を一定に保つことであり、対応するy座標(またはx座標)は比例して平行移動し、平行移動の大きさは、その点からx軸(またはy軸)までの垂直距離に比例する.誤接変換は、等面積変換に属し、すなわち、一つの形状が誤接変換の前後で、その面積が等しい.
プログラムにおいて特に有用な方法は、setScaleとpostTranslateであり、これらは単一の軸(または2つの軸)にわたって画像を反転させることを可能にする.負の数でスケールすると、座標系の負の空間に画像が描画されます.(0,0)点が左上にあるため、x軸の負の数を使用すると左に画像が描画されます.そのため、postTranslateメソッドを使用して、次のような画像を右に移動する必要があります.
y軸で同じことをして、画像を反転させて逆転させることができます.画像を2つの軸の中心点を中心に180°回転させることで、同じ効果が得られます.
1、Translate————平行移動変換
2、Scale————スケーリング変換
3、Rotate————回転変換
4、Skew————ミスカット変換
AndroidのAPIでは、set(Matrixの値を設定するために使用される)、post(後乗、マトリクスの原理に基づいて左乗に相当)、pre(先乗、マトリクスの右乗に相当)の3つの操作方式が提供されています.既定では、この4つの変換はすべて(0,0)点を中心に変換されます.もちろん、中心点を中心にした中心点をカスタマイズできます.
まず、シフトについて言えば、画像処理の過程で最もよく使われるのは、setTranslate()であり、シフトはx軸とy軸で画像を簡単に移動することを意味する.setTranslate法は2つの浮動小数点数をパラメータとして用い,各軸上を移動する数を表す.1番目のパラメータは、画像がx軸上に移動する数であり、2番目のパラメータは、画像がy軸上に移動する数である.x軸で正の値を使用してパンすると画像が右に移動し、負の値を使用して画像が左に移動します.y軸で正の値を使用してパンすると画像が下に移動し、負の値を使用して画像が上に移動します.
さらにスケールを見ると、Matrixクラスのもう一つの有用な方法はsetScaleメソッドです.パラメータとして2つの浮動小数点数を使用し、各軸で発生したスケール量を表します.1番目のパラメータはx軸のスケーリングであり、2番目のパラメータはy軸のスケーリングです.例:matrix.setScale(1.5f,1);複雑なのは画像の回転で、内蔵の方法の一つはsetRotate方法です.回転の角度を表す浮動小数点数を使用します.既定の点(0,0)を中心に正の数が時計回りに回転し、負の数が画像を反時計回りに回転します.既定の点は画像の左上隅です.たとえば、次のようになります.
Matrix matrix = new Matrix();
matrix.setRotate(15);
また、setRotateメソッドをパラメータとして回転の角度や周囲の回転点を使用して呼び出すこともできます.画像の中心点を回転点として選択します.たとえば、次のようにします.
matrix.setRotate(15,bmp.getWidth()/2,bmp.getHeight()/2);
正接変換の場合、数学的にはShear mappingまたはTransvectionとも呼ばれ、比較的特殊な線形変換である.正接変換の効果は、すべての点のx座標(またはy座標)を一定に保つことであり、対応するy座標(またはx座標)は比例して平行移動し、平行移動の大きさは、その点からx軸(またはy軸)までの垂直距離に比例する.誤接変換は、等面積変換に属し、すなわち、一つの形状が誤接変換の前後で、その面積が等しい.
プログラムにおいて特に有用な方法は、setScaleとpostTranslateであり、これらは単一の軸(または2つの軸)にわたって画像を反転させることを可能にする.負の数でスケールすると、座標系の負の空間に画像が描画されます.(0,0)点が左上にあるため、x軸の負の数を使用すると左に画像が描画されます.そのため、postTranslateメソッドを使用して、次のような画像を右に移動する必要があります.
matrix.setScale(-1, 1);
matrix.postTranslate(bmp.getWidth(),0);
y軸で同じことをして、画像を反転させて逆転させることができます.画像を2つの軸の中心点を中心に180°回転させることで、同じ効果が得られます.
matrix.setScale(1, -1);
matrix.postTranslate(0, bmp.getHeight());