2010-03-02 6 views
1

사용자가 Flex Spark VideoDisplay에서 비디오를 재생할 수있는 구성 요소를 만들고 싶습니다. 단추가있을 때마다 단추를 누를 때마다 VideoDisplay의 현재 시간과 스크린 샷을 저장하려고합니다. 모든 시간과 스크린 샷을 DataGrid에 표시하려면 스크린 샷을 저장해야합니다 (사용자가 DataGrid에서 시간을 가리키면 스크린 샷이 표시되어야 함).Flex Spark VideoDisplay의 스크린 샷을 찍는 방법?

그래서 Spark VideoDisplay의 스크린 샷을 가져 와서 저장하거나 표시하려면 어떻게해야합니까?

답변

3

몇 가지 방법으로 스냅 샷을 만들 수 있습니다.이 방법은 ImageSnapshot 클래스를 사용하는 것이지만 원하는 경우 비디오 디스플레이의 비트 맵을 수동으로 그릴 수 있습니다.

<?xml version="1.0" encoding="utf-8"?> 
<s:ItemRenderer 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    width="100" height="100" creationComplete="trace(data)"> 

    <mx:Image source="{this.data}" width="100%" height="100%"/> 

</s:ItemRenderer> 

샘플 앱은

<?xml version="1.0" encoding="utf-8"?> 
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"> 

    <fx:Script> 
     <![CDATA[ 

      import mx.graphics.ImageSnapshot; 

      public function takeSnapshot():void 
      { 
       var snapshot:BitmapData = ImageSnapshot.captureBitmapData(videoDisplay); 
       var bitmap:Bitmap = new Bitmap(snapshot); 
       list.dataProvider.addItem(bitmap); 
      } 
     ]]> 
    </fx:Script> 

    <s:layout> 
     <s:VerticalLayout horizontalAlign="center"/> 
    </s:layout> 

    <s:VideoDisplay id="videoDisplay" 
     source="video.mov" 
     width="400" height="300"/> 

    <s:Button id="button" click="takeSnapshot()"/> 

    <s:List id="list" horizontalCenter="0" width="100%" itemRenderer="SnapshotRenderer"> 
     <s:dataProvider> 
      <mx:ArrayList/> 
     </s:dataProvider> 
     <s:layout> 
      <s:TileLayout/> 
     </s:layout> 
    </s:List> 
</s:Application> 

당신이 (스냅 샷과 스냅 샷을 저장)을 설명하고 정확하게 수행하기 위해, 당신은 사람들을 저장할 수

렌더러 : 다음은 샘플입니다 배열에 takeSnapshot 메서드를 사용하거나 비트 맵을 가져 오는 list.dataProvider을 반복 할 수 있습니다. 그런 다음 저장하려면 백엔드 언어 (루비, 파이썬, PHP ...)에 전달해야합니다. 도움이

희망, 랜스

+0

고마워요! 나는 그들을 실제로 저장하고 싶지 않다. 비디오를 재생하는 동안 사용자가 사용할 수 있어야합니다. – Thomas

1

가 BYTEARRAY로 변환 한 후 다음과 같은 b64encoder 사용하여 바이트 배열 인코딩 플렉스에서 JPEGEncoder를 사용

var jpg:JPEGEncoder = new JPEGEncoder(); 
var ba:ByteArray = jpg.encode(bitmapData);   

var b64encoder:Base64Encoder = new Base64Encoder(); 
b64encoder.encodeBytes(ba); 
var b64String:String = b64encoder.flush(); 

지금 당신은 당신의 b64String을 통과 할 수 있습니다 HTTP POST 방법을 통해 서버에 연결하십시오 :)

관련 문제