项目中遇到这样的需求,需要动态求出正在编辑的图片的中心点坐标,编辑操作共有三种,平移,缩放和旋转.
其中平移缩放可以按照如下代码正确求出图片左上角和右下角坐标,但是旋转不可以.
/**
*
* @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 ;
这是我的一种思路,但是出来的结果不对.
Masalah telah selesai, caranya adalah seperti berikut:
Terdapat kaedah mudah, anda boleh mencubanya, gunakan kaedah transformasi kelas MotionEvent yang disediakan oleh Android
Langkah-langkah khusus adalah untuk menjana objek MotionEvent terlebih dahulu berdasarkan koordinat tengah imej sebelum putaran, dan kemudian panggil kaedah transformasi dan hantar Matrix Go ke sana, dan kemudian keluarkan x, y yang diubah suai, yang sepatutnya menjadi koordinat yang anda mahu
Anda boleh mendapatkan koordinat titik tengah sebelum transformasi, dan kemudian gunakan kaedah Matrix.mappoints selepas menetapkan matriks untuk mendapatkan koordinat titik tengah selepas transformasi