【问题标题】:Need to fix image scaling需要修复图像缩放
【发布时间】:2013-09-16 20:19:01
【问题描述】:

问题:我已经限制了最大和最小缩放,一切正常,但是:

  • 如果我尝试缩放小于最小值,然后缩放+,则需要在相反方向上执行相同的运动量。缩放+也是如此。在技​​术方面,它看起来像这样:

values[Matrix.MSCALE_X] 发生变化,尽管在此之前是:

m.reset();
m.setScale(sx1, sx1);

其中 sx1FIXED 值。这是我的代码:

       public boolean onScale(ScaleGestureDetector detector) {
            try{

            saved_gest_scale = newScale;
            newScale *= detector.getScaleFactor();
            scaleFactor = newScale / oldScale;

            target_img_width *= 1/scaleFactor;

            if (target_img_width > width)//limit max zoom
                {
                    //fit on screen:
                        m = new Matrix();
                        m.reset();
                        float w_coef = img_width / width;
                        float sx1 = 1/w_coef;
                        m.setScale(sx1, sx1);
                    ///========

                    //apply new size
                    float sx2 = target_img_width/width;
                    sx2 = 1/sx2;
                    m.setScale(sx2, sx2);

                    float[] values = new float[9];
                    m.getValues(values);

                    //center image:
                    float globalX = values[Matrix.MTRANS_X];
                    float globalY = values[Matrix.MTRANS_Y];
                    float wid = values[Matrix.MSCALE_X]*img_width;
                    float heig = values[Matrix.MSCALE_Y]*img_height;
                    m.postTranslate(width/2 - wid/2, height/2-heig/2);

                    if (wid <= width)//limit min-zoom
                    {
                        newScale = sx1;
                        m = new Matrix();
                        m.reset();
                        m.setScale(sx1, sx1);
                        wid = sx1*img_width;
                        heig = sx1*img_height;
                        debug.setText(wid + "<width" + "mx=" + values[Matrix.MSCALE_X] );
                        m.postTranslate(width/2 - wid/2, height/2-heig/2);
                    }
                        iw.setImageMatrix(m);
                }

            oldScale = newScale;
            }catch (Exception xx)
            {
                debug.setText("detector "+ xx.toString());
            }
            return  true;
        }

请帮忙。

【问题讨论】:

  • 非常非常不清楚的问题。请仔细考虑一下,提出一个简洁明了的问题
  • 请澄清您的问题,否则它可能会被否决。还可以考虑分解代码以显示相关位。

标签: java android image zooming scale


【解决方案1】:

使用scale 的一个参数,该参数在onScale 方法中进行了更改。还要使用两个常量minScalemaxScale。在onScale 方法中检查新比例是否符合可接受的间隔,如果符合,请使用新比例重新绘制图像。

现在您的代码一团糟。不知何故,limit min-zoom check 位于limit max zoom 内部,但缩放方法遍布各处。因此,当新的秤成为流行时以及它为什么会出错时,这是非常不干净的。

【讨论】:

    猜你喜欢
    • 2018-10-29
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多