Как я могу изменить этот скрипт изменения размера, чтобы заполнить / обрезать в контейнер? - PullRequest
1 голос
/ 30 августа 2011

У меня есть простой скрипт, который изменяет размер загруженного изображения, чтобы соответствовать определенной ширине и высоте, однако я хочу, чтобы опция была в состоянии заполнить, то есть центрировать и обрезать до определенной ширины / высоты - любые идеи о том, как я могуизменить это?

Текущий сценарий:

function resizeImg(mc:MovieClip, maxW:Number, maxH:Number=0, constrainProportions:Boolean=true):void{
    maxH = maxH == 0 ? maxW : maxH;
    mc.width = maxW;
    mc.height = maxH;
    if (constrainProportions) {
        mc.scaleX < mc.scaleY ? mc.scaleY = mc.scaleX : mc.scaleX = mc.scaleY;
    }
}

Я попытался выбрать код класса DisplayUtils AS3 из Soulwire (http://blog.soulwire.co.uk/flash/actionscript-3/fit-a-displayobject-into-a-rectangle), но он довольно запутан и не имеет комментариев, так что я изо всех сил(

1 Ответ

2 голосов
/ 01 сентября 2011

Для этого вам сначала необходимо сохранить исходные ширину и высоту, чтобы вы могли использовать их для масштабирования изображения. Кроме того, вам нужно замаскировать изображение и использовать ваши значения maxW и maxH в качестве его размеров. После этого вы сможете использовать такую ​​функцию:

function resizeImg(mc:Sprite, maxW:Number, maxH:Number = 0, constrainProportions:Boolean = true) : void
{
    maxH = maxH == 0 ? maxW : maxH;

    if(constrainProportions)
    {

        // First of we'll make the mc fit within the viewport

        // calulate the difference between the max and stored dimensions
        var dX:Number = maxW - originalWidth;
        var dY:Number = maxH - originalHeight;

        // evaluate values
        if (dY > dX)
        {

            // mc is wider then maxW
            // set width to max and scaleY to offset of width
            mc.width = maxW;
            mc.scaleY = mc.scaleX;
        }
        else
        {
            // mc is heigher then maxH
            // set height to max and scaleX to offset of height 
            mc.height = maxH;
            mc.scaleX = mc.scaleY;
        }

        // the mc now fits within the max viewport
        // now we'll use the same trick to fill the resized mc in the max viewport

        var dXcorrection:Number = maxW - mc.width;
        var dYcorrection:Number = maxH - mc.height;

        if (dYcorrection < dXcorrection)
        {
            mc.width = maxW;
            mc.scaleY = mc.scaleX;
        }
        else
        {
            mc.height = maxH;
            mc.scaleX = mc.scaleY;
        }


        // finally we'll center the resized mc within the max viewport 
        mc.x = (maxW - mc.width)/2;
        mc.y = (maxH - mc.height)/2;
    }
}
...