为了账号安全,请及时绑定邮箱和手机立即绑定

经过matrix平移缩放旋转的图片,如何动态求出图片中心点坐标

经过matrix平移缩放旋转的图片,如何动态求出图片中心点坐标

偶然的你 2019-03-23 19:14:57
项目中遇到这样的需求,需要动态求出正在编辑的图片的中心点坐标,编辑操作共有三种,平移,缩放和旋转.其中平移缩放可以按照如下代码正确求出图片左上角和右下角坐标,但是旋转不可以. /**     *     * @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};

    }


查看完整回答
反对 回复 2019-04-23
?
慕少森

TA贡献2019条经验 获得超9个赞

有个简单的方法, 可以去试试, 利用Android提供的MotionEvent类的transform方法
具体步骤先根据图片未旋转前的中心坐标生成一个MotionEvent对象, 然后调用transform方法, 将Matrix传递过去, 然后取出对应变换后的x, y, 应该就是你想要的坐标


查看完整回答
反对 回复 2019-04-23
?
慕神8447489

TA贡献1780条经验 获得超1个赞

可以先得到变换前中心点坐标,设置matrix后利用Matrix.mappoints方法来得到变换后中心点坐标


查看完整回答
反对 回复 2019-04-23
  • 3 回答
  • 0 关注
  • 1250 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信