Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

您好,请问下裁剪功能 ,如何能比例限制 #2

Open
zhengqiyao93 opened this issue Jun 16, 2018 · 3 comments
Open

您好,请问下裁剪功能 ,如何能比例限制 #2

zhengqiyao93 opened this issue Jun 16, 2018 · 3 comments
Assignees

Comments

@zhengqiyao93
Copy link

No description provided.

@ljxx
Copy link

ljxx commented Jul 12, 2018

追问,我也是想问这个问题,如何始终保持正方形剪切

@minetsh minetsh self-assigned this Jul 12, 2018
@minetsh
Copy link
Owner

minetsh commented Jul 12, 2018

这个功能和微信一样,没有支持正方形,以及制定比例的裁剪功能

@dyl169
Copy link

dyl169 commented Jul 15, 2021

我研究了下源码可以这样设置比例,如下还未验证希望高手指导一下是否正确
1.创建config配置文件

package me.minetsh.imaging;

public class IMGConfig {
    private static IMGConfig mInstance;

    private boolean isSave;
    public CropMode cropMode = CropMode.SQUARE;

    private IMGConfig() {
    }

    public static IMGConfig getInstance() {
        if (mInstance == null) {
            synchronized (IMGConfig.class) {
                if (mInstance == null) {
                    mInstance = new IMGConfig();
                }
            }
        }
        return mInstance;
    }

    public void setCropMode(CropMode mode) {
        this.cropMode = mode;
    }

    public enum CropMode {
        RATIO_4_3(1),
        RATIO_3_4(2),
        SQUARE(3),
        RATIO_16_9(4),
        RATIO_9_16(5),
        FREE(6);
        private final int ID;

        CropMode(final int id) {
            this.ID = id;
        }

        public int getId() {
            return ID;
        }
    }
}

2.在IMGClipWindow.java的 private void reset(float clipWidth, float clipHeight)方法下添加如下代码(更多比例自行添加)

/**
     * 重置裁剪
     */
    private void reset(float clipWidth, float clipHeight) {
        setResetting(true);
        //处理裁剪模式
        if (IMGConfig.getInstance().cropMode == IMGConfig.CropMode.FREE) {
            //自由模式
            mFrame.set(0, 0, clipWidth, clipHeight);
        } else if (IMGConfig.getInstance().cropMode == IMGConfig.CropMode.SQUARE) {
            //正方形
            mFrame.set(0, 0, Math.min(clipWidth, clipHeight), Math.min(clipWidth, clipHeight));
        }
        IMGUtils.fitCenter(mWinFrame, mFrame, CLIP_MARGIN);

        mTargetFrame.set(mFrame);
    }

3.在IMGimage.java的onTouchDown方法中添加如下代码或修改为如下

 public void onTouchDown(float x, float y) {
        isSteady = false;
        moveToBackground(mForeSticker);
        if (mMode == IMGMode.CLIP && IMGConfig.getInstance().cropMode == IMGConfig.CropMode.FREE) {
            //只有裁剪模式下并且自由裁剪才可以拖动
            mAnchor = mClipWin.getAnchor(x, y);
        }
    }

4.使用裁剪功能前调用IMGConfig设置cropMode即可

5.本人还未验证是否会产生其他BUG 只是提供一下我的思路

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants