FLASH AS3: удаление ключевых кадров программно - PullRequest
2 голосов
/ 05 января 2012

Вот что я пытаюсь сделать: У меня есть слайд-шоу фотографий с простым переходом затухания.У меня нет исходного файла, и я хотел бы извлечь все слайды из слайд-шоу.Я импортировал видео во флэш-память, поэтому все изображения из видео являются ключевыми кадрами.

Итак, теперь у меня есть фильм с примерно 10 000 ключевых кадров.У меня есть известный интервал ключевых кадров, который я не хочу (когда картинка находится на кадре сама по себе, и она не переходит с другой картинкой).

Можно ли:

  1. Удалить интервал ключевых кадров
  2. Создать новый мувиклип / документ / сцену ... с ключевыми кадрами, которыеЯ хочу

Любые предложения будут очень полезны!Спасибо

Ответы [ 2 ]

1 голос
/ 05 января 2012

Почему вы хотите удалить ключевые кадры? Вы можете просто перейти к нужному ключевому кадру и сделать растровую копию из фрагмента ролика в этом кадре. Далее следует небольшой утилитарный класс, который я создаю для создания растровых копий из объектов DisplayObject:

package{
import flash.display.DisplayObject;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;

public final class Cropper{

    public function Cropper():void{}

    public static function crop(_x, _y, _w:Number, _h:Number, displayObject:DisplayObject):Bitmap
    {
        var cropArea:Rectangle = new Rectangle(_x, _y, _w, _h);
        var croppedBitmap:Bitmap = new Bitmap(new BitmapData(_w, _h, true, 0x00000000));

        var dispObjData:BitmapData = new BitmapData(displayObject.width, displayObject.height, true, 0x00000000);
        dispObjData.draw(displayObject);

        croppedBitmap.bitmapData.copyPixels(dispObjData, cropArea, new Point(0, 0), null, null, true);

        return croppedBitmap;
    }
}

}

И вы могли бы использовать его в цикле для итерации по массиву ключевых кадров и создания копий, например:

var arr:Array = new Array(1, 10, 20, 30, 40...);
for(var i:int = 0; i < arr.length; i++){
yourDisplayObject.gotoAndStop(arr[i]);
var cropPic:Bitmap = Cropper.crop(x, y, width, height, displayObjectToCopy);
}

скажи, работает ли он у тебя ...

1 голос
/ 05 января 2012

Вы не можете копировать ключевые кадры так, как хотите, но я могу предложить вам способ воспроизвести ваш фильм / мувиклип без нежелательных кадров.

Сначала вы должны добавить прослушиватель событий на EnterFrame:

addEventListener(Event.ENTER_FRAME, onEnterFrame);

Затем вы можете написать метод для определения ваших допустимых фреймов:

private function isValidFrame(frameIndex:uint):Boolean
{
    return frameIndex > 10       //range start
            && frameIndex < 3000 //range end 
            && [62, 15, 337].indexOf(frameIndex) == -1;//add forbidden frames here
}

И наконец, вы можете написать свой слушатель enterframe:

private function onEnterFrame(e:Event):void
{
    var frameIndex:uint = this.currentFrame;
    while (!isValidFrame(frameIndex))
    {
        frameIndex++;
        if (frameIndex >= 10000)
        {
            //stop everything
            removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
    }
    gotoAndStop(frameIndex);
}

Приветствия!

...