2012-01-05 3 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 
    } 
    

    그리고를, 당신이 당신의를 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 조금 폴더의 유틸리티 클래스 다음과

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

    것은 ...

    말해
    관련 문제