Code Monkey home page Code Monkey logo

Comments (3)

ljxx avatar ljxx commented on August 17, 2024

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

from imaging.

minetsh avatar minetsh commented on August 17, 2024

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

from imaging.

dyl169 avatar dyl169 commented on August 17, 2024

我研究了下源码可以这样设置比例,如下还未验证希望高手指导一下是否正确
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 只是提供一下我的思路

from imaging.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.