项目中遇到这样的需求,需要动态求出正在编辑的图片的中心点坐标,编辑操作共有三种,平移,缩放和旋转.其中平移缩放可以按照如下代码正确求出图片左上角和右下角坐标,但是旋转不可以. /** * * @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 ;这是我的一种思路,但是出来的结果不对.
3 回答
回首忆惘然
TA贡献1847条经验 获得超11个赞
问题已解决,方法如下:
/**
* @param matrix 变化后的矩阵
* @param rectF 矩形对象
*/
public Float[] getCenter(Matrix matrix,RectF rectF){
matrix.mapRect(rectF);
//其实在此处就可以获得中心! wtf
float centerX = rectF.centerX();
float centerY = rectF.centerY();
return new Float[]{centerX,centerY};
}
慕少森
TA贡献2019条经验 获得超9个赞
添加回答
举报
0/150
提交
取消