Как пропорционально масштабировать видео разных размеров во флэш-памяти? - PullRequest
0 голосов
/ 14 февраля 2012

Итак, я создал свой vdeo-плеер, но у меня проблемы с обработкой видео разных размеров. Как правильно пропорционально масштабировать видео?

Я получаю исходную ширину и высоту из объекта метаданных:

        private function onMetaData(newMeta:Object):void
        {           
            _height = newMeta.height;
            _width = newMeta.width;
            scaleProportional();
        }

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

1.Коэффициент пропорциональности

Один из способов сделать это - рассчитать коэффициент пропорциональности.Он равен ширине, деленной на высоту:

var proportions: Number = video.width / video.height;

Вы можете применить этот коэффициент к любой новой ширине или высоте, для которой вы установили видео:

function scaleProportionalByWidth ( newWidth:Number ) : void {
    video.width = newWidth;
    video.height = newWidth / proportions;
}

function scaleProportionalByHeight ( newHeight : Number ) : void {
    video.height = newHeight;
    video.width = newHeight * proportions;
}

2.Коэффициент масштабирования

Другой способ сделать это - выяснить, по какому коэффициенту масштабировать видео, затем установите scaleX и scaleY вместо width и height:

function scaleProportionalByWidth ( newWidth : Number ) : void {
    scaleProportional ( newWidth, video.width );
}

function scaleProportionalByHeight ( newHeight : Number ) : void {
    scaleProportional ( newHeight, video.height );
}

function scaleProportional ( newValue:Number, oldValue : Number ) : void {
    var scale:Number = newValue / oldValue;
    video.scaleX *= scale;
    video.scaleY *= scale;
}

3.Пропорциональные классы экранных объектов

Вы также можете использовать подход в 2. для создания пропорционального подкласса любого DisplayObject путем переопределения сеттеров для width, height, scaleX и scaleY длясделать все масштабирование пропорциональным:

                                           //  works for Sprite, MovieClip...
public class ProportionalDisplayObject extends DisplayObject { 
    override public function set width ( width:Number ) : void {
        scaleX = width / super.width;
    }

    override public function set height ( height:Number ) : void {
        scaleY = height / super.height;
    }

    override public function set scaleX ( scaleX : Number ) : void {
        super.scaleX = super.scaleY = scaleX;
    }

    override public function set scaleY ( scaleY : Number ) : void {
        super.scaleY = super.scaleX = scaleY;
    }
} 
0 голосов
/ 14 февраля 2012

вы можете сделать что-то вроде этого:

// set video dimensions to match player;
video.width = player.width;
video.height = player.height;

// choose the larger scale property and match the other to it;
( video.scaleX < video.scaleY ) ? video.scaleY = video.scaleX : video.scaleX = video.scaleY;

// maybe center video in player ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...