项目中遇到这样的需求,需要动态求出正在编辑的图片的中心点坐标,编辑操作共有三种,平移,缩放和旋转.
其中平移缩放可以按照如下代码正确求出图片左上角和右下角坐标,但是旋转不可以.
/**
*
* @param matrix imageView的矩阵对象
* @param imageView 图片对象
* @return
*/
public float[] getLeftTop(Matrix matrix, GestureCropImageView imageView) {
Rect rectTemp = imageView.getDrawable().getBounds();
float[] values = new float[9];
matrix.getValues(values);
//左上角X坐标
mLeftX = values[2];
//左上角Y坐标
mLeftY = values[5];
//如果旋转的话
if (mState == ROTATE_STATE) {
//x0= (x - rx0)*cos(a) - (y - ry0)*sin(a) + rx0 ;
//
//y0= (x - rx0)*sin(a) + (y - ry0)*cos(a) + ry0 ;
//右下角X坐标
mRightX = (float) ((mRightX - mMidPntX) * Math.cos(mAngle / 180 * Math.PI) - (mRightY - mMidPntY) * Math.sin(mAngle / 180 * Math.PI) + mRightX);
//右下角Y坐标
mRightY = (float) ((mRightX - mMidPntX) * Math.sin(mAngle / 180 * Math.PI) + (mRightY - mMidPntY) * Math.cos(mAngle / 180 * Math.PI) + mRightY);
Log.i(TAG, "宽度 :" + rectTemp.width() * values[0]);
Log.i(TAG, "长度 :" + rectTemp.height() * values[4]);
} else {
//右下角X坐标
mRightX = values[2] + rectTemp.width() * values[0];
//右下角Y坐标
mRightY = values[5] + rectTemp.height() * values[4];
}
float[] arr = {mLeftX, mLeftY, mRightX, mRightY};
return arr;
}
2.现在已知的条件有,图片旋转的角度,图片按某点旋转的点坐标,左上角的坐标,如何才能求出右下角的坐标?
//x0= (x - rx0)cos(a) - (y - ry0)sin(a) + rx0 ;
//y0= (x - rx0)sin(a) + (y - ry0)cos(a) + ry0 ;
这是我的一种思路,但是出来的结果不对.
問題は解決されました。方法は次のとおりです:
リーリーAndroid が提供する MotionEvent クラスのtransformメソッドを使用する簡単な方法があります。試してみてください。
具体的な手順は、まず回転前の画像の中心座標に基づいて MotionEvent オブジェクトを生成し、次に、transform メソッドを呼び出して Matrix Go を渡し、対応する変換された x、y を取り出します。これが必要な座標になります
まず変換前に中心点の座標を取得し、行列を設定した後に Matrix.mappoints メソッドを使用して変換後の中心点の座標を取得できます