2012-01-05 6 views
2

私がやろうとしていることは次のとおりです。 シンプルなフェーディングトランジションのスライドショーがあります。私はソースファイルを持っていないと私はスライドショーからすべての単一の写真を抽出したいと思います。私は、ビデオからのすべての画像がキーフレームであるように、ビデオをフラッシュに読み込んだ。FLASH AS3:プログラムでキーフレームを削除

ここで、私は約10,000のキーフレームを持つ映画を持っています。私は望んでいないキーフレームの既知の間隔を持っています(ピクチャがフレーム上にあり、別のピクチャと一緒に移動していないとき)。

は私がすることはできます:

  • 私がしたいキーフレームで...新しいムービークリップ/ドキュメント/シーンを作成します
  • 任意の提案は次のようになり

    1. は、キーフレームの間隔を削除します。非常に役立ちます!ありがとう

    答えて

    1

    あなたが望むようにキーフレームをコピーすることはできませんが、不要なフレームなしでムービー/ムービークリップを再生する方法を提供できます。

    まずあなたが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 
    } 
    

    そしてfinaly、あなたはあなたの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); 
    } 
    

    乾杯!

    1

    なぜキーフレームを削除しますか?必要な正確なキーフレームに移動し、そのフレームのムービークリップからビットマップコピーを作成するだけです。 は、ここで私はのDisplayObjectからビットマップコピーを作成することがbuod少しutilのクラス次の:

    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); 
    } 
    

    それはあなたのために働くなら、私に教え...